最新Linux下学生信息管理系统设计报告
- 格式:docx
- 大小:1.38 MB
- 文档页数:21
学生信息系统详细设计报告1. 引言学生信息系统是一种管理学生信息的软件系统,能够方便、高效地记录和查询学生的个人信息、课程成绩、课程选择等信息。
本报告将详细介绍学生信息系统的设计方案和具体实现。
2. 系统需求分析学生信息系统的主要需求包括:- 学生信息管理:包括学生基本信息、联系方式、家庭背景等。
- 学生成绩管理:记录学生每次考试的成绩和综合评定。
- 课程管理:包括课程信息、选课流程、教师信息等。
- 个人中心:学生可以登录系统查询自己的个人信息和课程成绩。
3. 系统设计3.1 技术选型本系统采用以下技术进行开发:- 前端:采用React框架进行界面开发,使用HTML、CSS进行页面布局和样式设计。
- 后端:采用Node.js作为后端开发语言,使用Express框架搭建服务器。
- 数据库:采用MySQL进行数据的存储和查询。
3.2 系统架构设计学生信息系统可分为前端和后端两部分,前端负责用户交互界面的展示,后端负责处理前端的请求并与数据库进行交互。
前端使用React框架设计,将页面分成多个组件,通过组件间的通信实现数据的传递和展示。
后端使用Express框架搭建服务器,通过路由配置实现不同URL请求的处理。
后端与数据库之间通过MySQL连接实现数据的存储和读取。
系统架构设计如下图所示:3.3 数据库设计学生信息系统主要包括三个数据表:- 学生信息表(Students):包括学生ID、姓名、性别、年龄等字段。
- 成绩表(Scores):包括学生ID、科目、成绩等字段。
- 课程表(Courses):包括课程ID、课程名、教师名等字段。
数据表设计如下:学生信息表(Students):字段名类型说明-ID INT 学生ID姓名VARCHAR 学生姓名性别VARCHAR 学生性别年龄INT 学生年龄... ... ...成绩表(Scores):字段名类型说明-ID INT 学生ID科目VARCHAR 考试科目成绩INT 考试成绩... ... ...课程表(Courses):字段名类型说明-ID INT 课程ID课程名VARCHAR 课程名称教师名VARCHAR 授课教师... ... ...4. 功能实现4.1 学生信息管理学生信息管理包括学生的录入、查询、更新和删除。
学习并分别使用标准C 地文件操作函数和Linux 地系统调用创建一个对学生基本信息进行操作<插入、修改和删除)地C程序,学生基本信息以结构体地形式存储在文件#include<stdio.h>#include<unistd.h>#include<string.h>#include<stdlib.h>#include<time.h>struct stu_info {char stu_num[12] 。
char name[10] 。
char sex 。
/*0 为女生,1 为男生*/char mobile_phone[12] 。
}。
struct stu_info student 。
unsigned int number 。
struct stu_info stu[100] 。
FILE *in 。
FILE *out 。
int len 。
void inputstu(> 。
void updatestu(> 。
void deletestu(> 。
void displaystu(>void commanddisp(>{ printf(" ---------------------------------\n"> 。
b5E2RGbCAPprintf("| ---- 学生基本信息管理-------------------|\n"> 。
plEanqFDPwprintf("|---1. --------------------------------------- 基本信息插入. 2. 基本信息修改-------------------------- |\n"> 。
printf("|---3. --------------------------------------- 基本信息删除. 4. 基本信息显示-------------------------- |\n"> 。
学习并分别使用标准C的文件操作函数和Linux的系统调用创建一个对学生基本信息进行操作〔插入、修改和删除〕的C程序,学生基本信息以结构体的形式存储在文件#include<stdio.h>#include<unistd.h>#include<string.h>#include<stdlib.h>#include<time.h>struct stu_info {char stu_num[12];char name[10];char sex;/*0为女生,1为男生*/char mobile_phone[12];};struct stu_info student;unsigned int number;struct stu_info stu[100];FILE *in;FILE *out;int len;void inputstu<>;void updatestu<>;void deletestu<>;void displaystu<>;void commanddisp<>{ printf<"-------------------------------------------------\n">;printf<"|-----------学生基本信息管理--------------------|\n">;printf<"|---1.基本信息插入.-----2.基本信息修改----------|\n">;printf<"|---3.基本信息删除.-----4.基本信息显示----------|\n">;printf<"|---r.初始化〔第一次使用时用!!慎用〕-q.退出---|\n">;printf<"|--------------------请输入你的选择:-----------|\n">;printf<"-------------------------------------------------\n">;}void main<>{commanddisp<>;char ch;while<1>{do{ch=getchar<>;}while<ch=='\n'>;if<ch=='q'>return;switch<ch>{case '1':inputstu<>;break;case '2':updatestu<>;break;case '3':deletestu<>;break;case '4':displaystu<>;break;case 'r':printf<"\ninit student table\n">;if<<out=fopen<"c.doc","w">>==NULL> return;number=0;fwrite<&number,sizeof<unsigned int>,1,out>;fflush<out>;fclose<out>;break;default:break;}printf<"please enter any key to continue">;getchar<>;getchar<>;system<"clear">;commanddisp<>;}}void inputstu<>{printf<"\n-----------------请输入学生信息----------------------\n">;char p='y';while<p=='y'||p=='Y'>{memset<&student,0,sizeof<student>>;printf<"学号:">;scanf<"%s",student.stu_num>;printf<"XX:">;scanf<"%s",>;printf<"性别<0是女,1是男>:">;do{student.sex=getchar<>;}while<student.sex=='\n'>;printf<"手机号:">;scanf<"%s",student.mobile_phone>;len=sizeof<struct stu_info>;if<<out=fopen<"c.doc","r+">>==NULL> return;fread<&number,sizeof<unsigned int>,1,out>;number++;fseek<out,0L,SEEK_SET>;fwrite<&number,sizeof<unsigned int>,1,out>;fflush<out>;fseek<out,0L,SEEK_END>;fwrite<&student,len,1,out>;fflush<out>;fclose<out>;printf<"是否继续输入Y/N\n">;fflush<stdin>;do{p=getchar<>;}while<p=='\n'>;}}void updatestu<>{printf<"\n-------------------学生信息修改-------------------------\n">;printf<"请输入修改学生的__">;memset<&student,0,sizeof<student>>;scanf<"%s",student.stu_num>;printf<"XX:">;scanf<"%s",>;printf<"性别<0是女,1是男>:">;do{student.sex=getchar<>;}while<student.sex=='\n'>;printf<"手机号:">;scanf<"%s",student.mobile_phone>;len=sizeof<struct stu_info>;in=fopen<"c.doc","r+">;fread<&number,sizeof<unsigned int>,1,in>;unsigned int j;long kk;for<j=0;j<number;j++>{fread<&stu[0],len,1,in>;if<strcmp<student.stu_num,stu[0].stu_num>==0>{ kk=len;fseek<in,-kk,SEEK_CUR>;fwrite<&student,len,1,in>;break;}}fflush<in>;fclose<in>;if<j==number>printf<"没有这条记录\n">;}void deletestu<>{printf<"\n-------------------学生信息删除-------------------------\n">;in=fopen<"c.doc","r">;fread<&number,sizeof<unsigned int>,1,in>;memset<stu,0,sizeof<stu>>;len=sizeof<struct stu_info>;fread<stu,len,number,in>;unsigned int i;char f;while<1>{printf<"请输入删除学生的__">;char stu_num[12];memset<stu_num,0,sizeof<stu_num>>;fflush<stdin>;scanf<"%s",stu_num>;for<i=0;i<number;i++>if<strcmp<stu_num,stu[i].stu_num>==0>break;if<i==number> printf<"没有这条记录\n">;else{number--;for<;i<number;i++>{strcpy<stu[i].stu_num,stu[i+1].stu_num>;strcpy<stu[i].name,stu[i+1].name>;stu[i].sex=stu[i+1].sex;strcpy<stu[i].mobile_phone,stu[i+1].mobile_phone>;}}printf<"是否继续删除Y/N\n">;fflush<stdin>;do{f=getchar<>;}while<f=='\n'>;if<f!='y'&&f!='Y'>break;}fclose<in>;out = fopen<"c.doc","w">;fwrite<&number,sizeof<unsigned int>,1,out>;len=len*number;fwrite<stu,len,1,out>;fflush<out>;fclose<out>;}void displaystu<>{ printf<"\n------------------------------显示学生信息----------------------------------\n">;in=fopen<"c.doc","r">;fread<&number,sizeof<unsigned int>,1,in>;memset<stu,0,sizeof<stu>>;len=sizeof<struct stu_info>;fread<stu,len,number,in>;unsigned int i;printf<"----------------------------------------------------------------------------\n">;printf<"number \t学号\t XX\t性别<0是女,1是男> 手机号\n">;for<i=0;i<number;i++>printf<" %3d %12s%10s %c %12s\n",i,stu[i].stu_num,stu[i].name,stu[i].sex,st u[i].mobile_phone>;printf<"----------------------------------------------------------------------------\n">;fclose<in>;}利用父子进程间的管道通信方式,改写实验3步骤6要求的程序。
学生信息管理系统设计报告一、引言学生信息管理系统是一个用于管理学生相关信息的软件系统。
它主要包括学生基本信息、学生成绩、学生课程信息等内容。
本文将对学生信息管理系统进行设计和分析,并给出相应的解决方案。
二、需求分析1. 学生基本信息管理:包括学生的姓名、学号、性别、出生日期、联系方式等信息。
2. 学生成绩管理:包括学生的各门课程成绩、学期绩点、总绩点等信息。
3. 学生课程信息管理:包括学生已选课程、课程时间、任课教师等信息。
4. 系统安全性:要求系统具备权限管理功能,确保只有授权人员才能访问和修改学生信息。
三、系统设计1. 数据库设计:使用关系型数据库存储学生信息。
其中,学生基本信息和学生成绩可以存储在不同的表中,通过学号进行关联。
2. 用户界面设计:设计简洁直观的用户界面,方便用户进行学生信息的查询、添加、修改和删除操作。
3. 权限管理设计:系统管理员具有最高权限,可以管理用户账号和权限。
教师和学生账号分别具有对应的权限,可以进行相应的操作。
四、系统功能1. 学生信息管理:实现学生基本信息的录入、查询、修改和删除功能。
2. 成绩管理:实现学生成绩的录入、查询和统计功能,包括计算学期绩点和总绩点。
3. 课程管理:实现学生选课功能,包括查询已选课程、添加新课程和退选课程。
4. 用户管理:实现用户账号的添加、修改和删除功能,以及权限的管理。
五、系统实现1. 硬件需求:服务器、数据库服务器、客户端设备等。
2. 软件需求:操作系统、数据库管理系统、Web服务器等。
3. 开发工具:根据具体需求选择合适的开发工具,如Java、Python等。
4. 系统测试:进行功能测试、性能测试和安全测试,确保系统的稳定性和安全性。
六、系统部署与维护1. 系统部署:将开发完成的系统部署到服务器上,并进行相关的配置。
2. 系统维护:定期进行系统备份和升级,及时修复系统中出现的问题和漏洞。
七、总结学生信息管理系统是一个方便高效的工具,可以帮助学校管理学生相关信息。
//第一部分:结构体、流程图、总结………………Page1//第二部分C语言源代码………………Page10//第一部分一、简介:本系统称为“学生选课管理系统”,主要功能是实现对学生信息和教师信息的管理,以及学生成绩的管理。
该系统分为三级身份:管理员、教师、学生。
其中管理员的权限有:1)、添加学生或老师的信息,2)、删除学生或老师信息,3、修改学生或老师信息,4)查找学生或老师信息。
教师的权限:1)仅可以修改自己密码,2)查看所有关于自身的信息,3)修改其所授科目的学生科目的成绩。
学生的权限:仅可以修改自己的密码,查看所有有关自己的信息,另外还要可以选课。
二、设计思想;[1]:分别把学生信息、科目信息和教师—科目信息建立三个链表。
//科目信息typedef struct subject_info{float SUB_notes[3];//科目成绩int SUB_csscore;//科目学分char SUB_csname[32];//科目名称struct list_head list;}SUB;//学生信息typedef struct STU_info{float STU_totalscore;//总分int STU_id;//学号int STU_age;//年龄int STU_grade;//年级int STU_place;//名次char STU_name[32];//姓名char STU_psword[32];//密码SUB subject[3];struct list_head list;}STU;//教师信息:typedef struct TCH_info{int TCH_id;//工号char TCH_name[32];//姓名char TCH_psword[32];//密码SUB s ubject[1];struct list_head list;}TEC;//管理员信息typedef struct ADM_info{char ADM_usename[8];char ADM_psword[6];}ADM;ADM use[1];#define Y'y'#define N'n'#define S_FLAG 's'#denfine T_FLAG 't'#define A_FLAG'a'void gettime();//获取当前时间void main_menu();//主菜单void stu_login();//学生登录void openf (char *filename);//判断文件是否存在void tec_login();//老师登录void adm_login();//管理员登录void adm_nextmenu();//管理员2级菜单void a_updt_stuinfo();//操作学生信息void a_updt_tecinfo();//操作老师信息void a_updt_myinfo();//操作管理员自身信息void a_add_stuinfo();//添加学生信息void a_add_tecinfo();//添加老师信息void a_mdify_stuinfo();//修改学生信息void a_del_info(char flag);//删除信息void a_mdify_tecinfo();//修改老师信息void a_seek_stuinfo();//查找学生信息void a_seek_tecinfo();//查找老师信息void show (char flag);//显示信息void save (char flag,char system);//保存信息void check(char flag);//验证密码void commom();//公用函数集合void a_show(char flag);//显示信息void a_seek_info(char flag);//查找信息void a_mdify_info(char flag);//修改学生或老师信息void stu_nextmenu(int tmpid);//学生菜单void tec_nextmenu(int tmpid);//老师菜单void s_show_myinfo(int tmpid);//学生显示自己信息void t_show_myinfo(int tmpid);//教师显示自己信息void s_updt_myinfo(int tmpid);//学生更新自己信息void s_select_subject(int tmpid);//学生选课void t_updt_stuinfo(int tmpid);//教授更新自己信息void t_updt_myinfo(int tmpid);//教授显示自己信息void readf();//从文件中读取信息void stu_sort();//对学生链表排序float ave (float core[3]);//求平均成绩float (*f)(float core[3]);//int inputpsword(char *pass);//输入密码回显* [2]: 模块分析teacher_menu adminmenutec_next_menu()三、总结《学生选课管理系统》,5天。
linux学生管理系统课程设计一、课程目标知识目标:1. 理解Linux操作系统的基本原理和特点;2. 掌握Linux环境下常用命令的使用方法;3. 学会使用Linux系统进行文件管理和基本系统配置;4. 了解Linux学生管理系统的功能和模块组成。
技能目标:1. 能够熟练运用Linux命令行进行操作;2. 能够独立完成Linux系统下的文件管理任务;3. 能够进行基本的系统配置和维护;4. 能够运用所学知识设计和实现一个简单的Linux学生管理系统。
情感态度价值观目标:1. 培养学生对Linux操作系统的兴趣,提高学习积极性;2. 培养学生团队合作意识,学会与他人共同解决问题;3. 培养学生勇于探索、善于创新的精神,提高实践能力;4. 增强学生的信息安全意识,树立正确的网络道德观念。
课程性质:本课程为实践性较强的课程,以学生动手实践为主,理论讲解为辅。
学生特点:学生具备一定的计算机操作基础,对Linux操作系统有一定了解,但实际操作能力有待提高。
教学要求:注重理论与实践相结合,强调学生动手实践,培养学生解决问题的能力。
在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. Linux操作系统概述- 系统特点与优势- 常见Linux发行版介绍2. Linux基本命令与操作- 文件目录操作命令- 文本处理命令- 系统管理与网络配置命令3. 文件系统与文件管理- Linux文件系统结构- 文件权限与归属- 文件管理操作实践4. Linux系统管理与配置- 系统启动流程- 用户与用户组管理- 网络配置与防火墙设置5. Linux学生管理系统设计与实现- 系统需求分析- 功能模块划分- 数据库设计与实现- 系统编程与调试6. 实践项目:Linux学生管理系统- 项目规划与分工- 系统设计与编码- 系统测试与优化- 项目总结与评价教学内容安排与进度:第1周:Linux操作系统概述第2-3周:Linux基本命令与操作第4周:文件系统与文件管理第5周:Linux系统管理与配置第6-8周:Linux学生管理系统设计与实现第9-10周:实践项目:Linux学生管理系统教材章节关联:《Linux操作系统与应用》第1章:Linux操作系统概述第2章:Linux基本命令与操作第3章:文件系统与文件管理第4章:Linux系统管理与配置第5章:数据库与编程第6章:综合应用与实践项目三、教学方法1. 讲授法:- 对于Linux操作系统的基本概念、原理和操作方法,采用讲授法进行教学,使学生在短时间内掌握必要的理论知识。
学生信息管理系统课程设计报告一、引言随着信息技术的不断发展,学生信息管理在学校的日常管理工作中变得越来越重要。
为了提高学生信息管理的效率和准确性,开发一个高效、实用的学生信息管理系统成为了必然的需求。
本课程设计旨在设计并实现一个功能齐全、操作简便的学生信息管理系统,以满足学校对学生信息管理的需求。
二、系统需求分析(一)功能需求1、学生信息的录入、修改、删除和查询功能。
2、课程信息的管理,包括课程的添加、修改、删除和查询。
3、成绩管理功能,能够录入、修改学生的课程成绩,并进行统计分析。
4、能够生成学生的个人成绩单和班级成绩汇总表。
5、具备用户管理功能,包括添加用户、修改用户信息和设置用户权限。
(二)性能需求1、系统响应时间要短,保证用户操作的流畅性。
2、数据存储要安全可靠,防止数据丢失或损坏。
3、系统要具备良好的稳定性,能够长时间稳定运行。
(三)界面需求1、系统界面要简洁、美观,操作方便。
2、提供清晰的导航和提示信息,方便用户使用。
三、系统设计(一)总体设计1、系统采用 B/S 架构,方便用户通过浏览器进行访问。
2、分为前端页面展示和后端数据处理两部分。
(二)数据库设计1、设计了学生表、课程表、成绩表、用户表等相关数据表。
2、确定了表之间的关联关系,以保证数据的一致性和完整性。
(三)功能模块设计1、学生信息管理模块,实现学生信息的增删改查。
2、课程管理模块,负责课程的相关操作。
3、成绩管理模块,处理学生成绩的录入、修改和统计。
4、用户管理模块,管理系统用户的信息和权限。
四、系统实现(一)开发工具和技术1、使用 Python 作为主要开发语言。
2、采用 Django 框架进行 Web 开发。
3、数据库选择 MySQL。
(二)关键代码实现1、学生信息录入功能的代码实现。
2、成绩统计分析功能的算法实现。
(三)系统测试1、进行了功能测试,确保各项功能正常运行。
2、进行了性能测试,对系统的响应时间和稳定性进行评估。
学生信息管理系统设计报告随着信息技术的发展,学生信息管理系统在学校管理中起着越来越重要的作用。
本文将就学生信息管理系统的设计进行详细的阐述,以期提供一个高效、便捷、安全的学生信息管理系统。
一、背景介绍学生信息管理系统是指通过计算机技术和数据库管理系统,对学生的基本信息、课程信息、成绩信息等进行管理、查询和统计的系统。
它可以提高学校管理的效率,减少工作量,提供及时准确的信息服务。
二、系统功能1. 学生基本信息管理:包括学生的姓名、性别、年龄、出生日期、籍贯、联系方式等基本信息的录入、查询、修改和删除。
2. 课程信息管理:包括课程的名称、学分、授课教师、上课时间等信息的录入、查询、修改和删除。
3. 成绩信息管理:包括学生的学号、课程名称、成绩等信息的录入、查询、修改和删除。
4. 学生选课管理:包括学生的选课操作、选课结果查询和退选操作。
5. 教师信息管理:包括教师的姓名、性别、年龄、联系方式等信息的录入、查询、修改和删除。
三、系统设计1. 数据库设计:建立学生信息、课程信息、成绩信息、教师信息等数据库表,确保数据的准确性和一致性。
2. 用户权限管理:对不同用户设置不同的权限,保证信息的安全性和保密性。
3. 界面设计:设计简洁明了的用户界面,方便用户进行操作和查询。
4. 数据录入和修改:通过表单的方式进行数据的录入和修改,确保数据的完整性和准确性。
5. 数据查询和统计:提供灵活多样的查询和统计功能,方便用户根据需要获取信息。
6. 数据备份和恢复:定期进行数据备份,确保数据的安全性和可靠性。
四、系统实施1. 硬件环境:搭建适合的服务器和数据库环境,确保系统的稳定性和可靠性。
2. 软件环境:选择适合的开发工具和数据库管理系统,确保系统的高效性和易用性。
3. 数据导入和验证:将学生、课程、教师等信息导入系统,并进行验证和测试,确保数据的准确性和完整性。
4. 系统测试和优化:对系统进行全面测试,发现和修复bug,优化系统的性能和用户体验。
Linux课程设计报告班级:学号:姓名:2012 年6 月3 日一、设计目标课程设计为“学生信息管理系统”,主要功能是对教师和学生信息的综合管理以及对学生成绩的综合管理。
本“学生信息管理系统”主要分为三种权限1)管理员权限:添加、删除、修改学生的个人基本信息;添加、删除、修改学生的考试成绩信息;修改学生用户的帐号、密码功能;添加、删除、修改教师的个人基本信息;修改教师用户的帐号、密码功能;对信息进行查找的功能;2)教师权限对自己的信息进行查看、修改、删除等操作;对学生成绩进行录入、修改、删除等功能;对自己的帐号密码进行修改;3)学生权限查看自己的个人信息;查看自己的成绩信息;修改自己的帐号密码信息。
二、原理分析及实现过程1.Socket原理在该系统中客户端与服务器端采用流式套接字惊醒socket通信。
流式套接字提供双向的、有序的、无重复的、无记录边界的、可靠地数据流传输服务。
当应用程序需要交换大批量数据时,或者要求数据按照发送的顺序无重复的到达目的地的时候,使用流式套接字是最方便的。
在Internet通信域中,流式套接字使用TCP形成的进程间通路,具有TCP为上层所提供服务的特点,在使用流式套接字传输数据之前,必须在数据的发送端和接收端之间建立连接。
其中用到的相关函数如下:服务器首先创建一个流式套接字,相当于准备了一个插座。
2.Socket客户端/服务器模式在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器模式(Client/Server model),即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。
客户/服务器模式的建立基于以下两点:首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。
其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户端/服务器模式的TCP/IP。
学生信息管理系统设计报告1.引言学生信息管理系统是一种用于管理学校或其他教育机构学生信息的软件系统。
它提供了一个集中管理学生信息的平台,包括学生的个人信息、课程信息、成绩信息等。
本报告将介绍学生信息管理系统的设计方案,并详细说明系统的功能、架构和实施计划。
2.功能需求(1)学生信息管理:系统应能够方便地记录学生的个人信息,包括姓名、性别、生日、家庭地址等。
同时,系统还应提供学生信息的查询、修改和删除功能。
(2)课程信息管理:系统应能够管理学校的课程信息,包括课程名称、教师信息、时间表等。
同时,系统还应提供课程信息的查询、修改和删除功能。
(3)成绩管理:系统应能够记录学生的课程成绩信息,包括考试成绩、作业成绩等。
系统还应提供成绩的查询、统计和分析功能。
(4)学生选课管理:系统应能够记录学生的选课信息,包括选课时间、选课结果等。
3.架构设计(1)前端界面:系统的前端界面由HTML、CSS和JavaScript构建,提供用户友好的交互界面。
(2) 后端服务器:系统的后端服务器由Python编程语言构建,用于处理用户请求并与数据库交互。
(3) 数据库:系统使用关系型数据库来存储学生、课程和成绩等信息。
常用的数据库管理系统包括MySQL、Oracle等。
4.数据库设计系统的数据库设计如下:(1)学生表:包含学生的基本信息,如学号、姓名、性别、生日、家庭地址等。
(2)课程表:包含课程的基本信息,如课程编号、课程名称、教师信息、时间表等。
(3)成绩表:包含学生的课程成绩信息,如学号、课程编号、考试成绩、作业成绩等。
(4)选课表:包含学生的选课信息,如学号、课程编号、选课时间、选课结果等。
5.实施计划系统的实施计划如下:(1)需求分析:对系统的功能需求进行详细分析,包括学生信息管理、课程信息管理、成绩管理和学生选课管理等。
(2)系统设计:根据需求分析结果进行系统的架构设计和数据库设计。
(3)系统开发:根据系统设计进行软件的开发和测试。
Linux课程设计报告班级:学号:姓名:2012 年6 月3 日一、设计目标课程设计为“学生信息管理系统”,主要功能是对教师和学生信息的综合管理以及对学生成绩的综合管理。
本“学生信息管理系统”主要分为三种权限1)管理员权限:添加、删除、修改学生的个人基本信息;添加、删除、修改学生的考试成绩信息;修改学生用户的帐号、密码功能;添加、删除、修改教师的个人基本信息;修改教师用户的帐号、密码功能;对信息进行查找的功能;2)教师权限对自己的信息进行查看、修改、删除等操作;对学生成绩进行录入、修改、删除等功能;对自己的帐号密码进行修改;3)学生权限查看自己的个人信息;查看自己的成绩信息;修改自己的帐号密码信息。
二、原理分析及实现过程1. Socket原理在该系统中客户端与服务器端采用流式套接字惊醒socket通信。
流式套接字提供双向的、有序的、无重复的、无记录边界的、可靠地数据流传输服务。
当应用程序需要交换大批量数据时,或者要求数据按照发送的顺序无重复的到达目的地的时候,使用流式套接字是最方便的。
在Internet通信域中,流式套接字使用TCP形成的进程间通路,具有TCP为上层所提供服务的特点,在使用流式套接字传输数据之前,必须在数据的发送端和接收端之间建立连接。
其中用到的相关函数如下:服务器首先创建一个流式套接字,相当于准备了一个插座。
2. Socket客户端/服务器模式在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器模式(Client/Server model),即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。
客户/服务器模式的建立基于以下两点:首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。
其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户端/服务器模式的TCP/IP。
服务器方要先启动,并根据请求提供相应服务:1 )打开一通信通道并告知本地主机,它愿意在某一公认地址上接收客户请求;2 )等待客户请求到达该端口;3 )接收到重复服务请求,处理该请求并发送应答信号。
接收到并发服务请求,要激活一新进程来处理这个客户请求(如UNIX系统中用fork、exec)。
新进程处理此客户请求,并不需要对其它请求作出应答。
服务完成后,关闭此新进程与客户的通信链路,并终止。
4 )返回第二步,等待另一客户请求。
5 )关闭服务器客户方:1 )打开一通信通道,并连接到服务器所在主机的特定端口;2 )向服务器发服务请求报文,等待并接收应答;继续提出请求......3 ) 请求结束后关闭通信通道并终止。
3. Socket套接字的三种类型流式套接字(SOCK_STREAM)提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复地发送,且按发送顺序接收。
内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。
文件传送协议(FTP)即使用流式套接字。
数据报式套接字(SOCK_DGRAM)提供了一个无连接服务。
数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。
网络文件系统(NFS)使用数据报式套接字。
原始式套接字(SOCK_RAW)该接口允许对较低层协议,如IP、ICMP直接访问。
常用于检验新的协议实现或访问现有服务中配置的新设备。
4. Socket工作流程1)创建套接字──socket()应用程序在使用套接字前,首先必须拥有一个套接字,系统调用socket()向应用程序提供创建套接字的手段,其调用格式如下:SOCKET PASCAL FAR socket(int af, int type, int protocol);该调用要接收三个参数:af、type、protocol。
参数af指定通信发生的区域,UNIX 系统支持的地址族有:AF_UNIX、AF_INET、AF_NS等,而DOS、WINDOWS中仅支持AF_INET,它是网际网区域。
因此,地址族与协议族相同。
参数type 描述要建立的套接字的类型。
参数protocol说明该套接字使用的特定协议,如果调用者不希望特别指定使用的协议,则置为0,使用默认的连接模式。
根据这三个参数建立一个套接字,并将相应的资源分配给它,同时返回一个整型套接字号。
因此,socket()系统调用实际上指定了相关五元组中的“协议”这一元。
2)指定本地地址──bind()当一个套接字用socket()创建后,存在一个名字空间(地址族),但它没有被命名。
bind()将套接字地址(包括本地主机地址和本地端口地址)与所创建的套接字号联系起来,即将名字赋予套接字,以指定本地半相关。
其调用格式如下:int PASCAL FAR bind(SOCKET s, const struct sockaddr FAR * name, int namelen);参数s是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。
参数name 是赋给套接字s的本地地址(名字),其长度可变,结构随通信域的不同而不同。
namelen表明了name的长度。
如果没有错误发生,bind()返回0。
否则返回值SOCKET_ERROR。
3)建立套接字连接──connect()与accept()Connect:客户机端向服务器端发送出请求连接,它使用的目的端口号是服务器端用做监听的套接字使用保留的端口号,执行此项命令之后,客户机端进入到阻塞的状态,等待服务器的连接应答。
一旦接收来自服务器端的响应套接字的应答,客户机端就向服务器的响应套接字发送连接确认,这样,客户机端与服务器的TCP连接就建立起来了Accept:接收客户机端的请求,分为两种情况。
如果此时,监听套接字的请求缓冲区队列中有客户机端的连接请求在等待,就从中取出一个连接请求,并接收他。
具体过程是:服务器端创建一个新的套接字,成为相应套接字,成为响应套接字。
系统赋予给这个响应套接字一个服务器端的自由端口号,并通过响应套接字向客户端发送连接应答,客户机端收到这个应答,按照TCP连接规范,向服务器端发送连接确认,并同时向服务器端发来数据,这就完成了TCP的三次握手的过程。
此后,就由服务器端的这个响应套接字专门负责与该客户机端的交换数据工作。
以上过程当然就同时腾出了一个监听套接字的请求缓冲单元,又可以接纳新的连接请求。
如果此时,监听套接字的请求缓冲区队列中没有任何客户机端的连接请求在等待,执行此命令就会使服务器端的进程处于阻塞等待的状态,使它时刻准备接收来自客户机端的连接请求。
服务器端采用这种方式能够同时为多个客户机服务这两个系统调用用于完成一个完整相关的建立,其中connect()用于建立连接。
无连接的套接字进程也可以调用connect(),但这时在进程之间没有实际的报文交换,调用将从本地操作系统直接返回。
这样做的优点是程序员不必为每一数据指定目的地址,而且如果收到的一个数据报,其目的端口未与任何套接字建立“连接”,便能判断该端靠纪纪可操作。
而accept()用于使服务器等待来自某客户进程的实际连接。
connect()的调用格式如下:int PASCAL FAR connect(SOCKET s, const struct sockaddr FAR * name, int namelen)参数s是欲建立连接的本地套接字描述符。
参数name指出说明对方套接字地址结构的指针。
对方套接字地址长度由namelen说明。
如果没有错误发生,connect()返回0。
否则返回值SOCKET_ERROR。
在面向连接的协议中,该调用导致本地系统和外部系统之间连接实际建立。
由于地址族总被包含在套接字地址结构的前两个字节中,并通过socket()调用与某个协议族相关。
因此bind()和connect()无须协议作为参数。
accept()的调用格式如下:SOCKET PASCAL FAR accept(SOCKET s, struct sockaddr FAR* addr, int FAR* addrl en);参数s为本地套接字描述符,在用做accept()调用的参数前应该先调用过listen()。
addr 指向客户方套接字地址结构的指针,用来接收连接实体的地址。
addr的确切格式由套接字创建时建立的地址族决定。
addrlen 为客户方套接字地址的长度(字节数)。
如果没有错误发生,accept()返回一个SOCKET类型的值,表示接收到的套接字的描述符。
否则返回值INV ALID_SOCKET。
accept()用于面向连接服务器。
参数addr和addrlen存放客户方的地址信息。
调用前,参数addr 指向一个初始值为空的地址结构,而addrlen 的初始值为0;调用accept()后,服务器等待从编号为s的套接字上接受客户连接请求,而连接请求是由客户方的connect()调用发出的。
当有连接请求到达时,accept()调用将请求连接队列上的第一个客户方套接字地址及长度放入addr 和addrlen,并创建一个与s有相同特性的新套接字号。
新的套接字可用于处理服务器并发请求。
四个套接字系统调用,socket()、bind()、connect()、accept(),可以完成一个完全五元相关的建立。
socket()指定五元组中的协议元,它的用法与是否为客户或服务器、是否面向连接无关。
bind()指定五元组中的本地二元,即本地主机地址和端口号,其用法与是否面向连接有关:在服务器方,无论是否面向连接,均要调用bind();钥纪纪户方,若采用面向连接,则可以不调用bind(),而通过connect()自动完成。
若采用无连接,客户方必须使用bind()以获得一个唯一的地址。
4)监听连接──listen()此调用用于面向连接服务器,表明它愿意接收连接。
listen()需在accept()之前调用,其调用格式如下:int PASCAL FAR listen(SOCKET s, int backlog);参数s标识一个本地已建立、尚未连接的套接字号,服务器愿意从它上面接收请求。
backlog表示请求连接队列的最大长度,用于限制排队请求的个数,目前允许的最大值为5。
如果没有错误发生,listen()返回0。
否则它返回SOCKET_ERROR。
listen()在执行调用过程中可为没有调用过bind()的套接字s完成所必须的连接,并建立长度为backlog的请求连接队列。
调用listen()是服务器接收一个连接请求的四个步骤中的第三步。