学生成绩信息管理系统_第1页
学生成绩信息管理系统_第2页
学生成绩信息管理系统_第3页
学生成绩信息管理系统_第4页
学生成绩信息管理系统_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实用文档文案大全学生成绩信息管理系统1 引言 . 1.1 设计目的与要求. 1.2 设计内容 . . 2 系统需求与功能分析 . 2.1 系统需求分析. 2.2 系统功能分析 . . 3 总体结构设计. 3.1 系统的结构设计. . 3.2 系统管理流程图. . 4 系统详细设计和系统实现. 5 系统测试 . 6 结束语 . 参考文献 . 附录 1:链表结构化设计源程序清单 . 附录2:顺序表结构化设计源程序清单. . .26 1 引言1.1 设计目的与要求该学生信息管理系统采用c+语言开发研制,针对学生成绩及其数据特点,可以全面实现对学生成绩的插入、查询、修改、删除和输出等功能的计算机管理。

2、它能使学生信息数据的工作人员从繁重的工作中解脱出来,大大减轻了工作量,减少人为的工作失误,全面提高学生信息管理的效率,从而使学校对于学生成绩的管理水平和技术水平跃上一个新的台阶。(1) 程序要添加适当的注释,程序的书写要采用缩进格式。(2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。(4) 根据实验报告模板详细书写实验报告, 在实验报告中给出链表根据姓名进行查找的算法和插入算法的流程图。1.2 设计内容定义一个包含学生信息(学号,姓名,成绩)的的顺序表和链表,使

3、其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息;(2) 逐个显示学生表中所有学生的相关信息;(3) 根据姓名进行查找,返回此学生的学号和成绩;(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩) ;(5) 给定一个学生信息,插入到表中指定的位置;(6) 删除指定位置的学生记录;(7) 统计表中学生个数。2 系统需求与功能分析2.1 系统需求分析(1) 能完成学生信息的插入、查询、修改、删除、输出等功能;(2) 采用单链表与顺序表存储结构实现;(3) 所有数据以外部文件方式保存。2.2 系统功能分析(1) 要设计一个学生成绩管理系统,其功能包括:插入函数add() :将学

4、生成绩信息插入到链表中;查询函数search() :分别可以按学号和按姓名进行学生成绩查询;删除函数delete():当需要删除的学号和姓名一致时则删除对应的学生记录;修改函数modify():修改指定的学生成绩信息;输出函数show():输出全部学生成绩信息;菜单函数menu():为程序的菜单函数为实现各种功能提供便捷;读取数据函数read() :从外部文件读取学生成绩信息;保存数据函数save() :将数据保存到外部文件中。3 总体结构设计3.1 系统的结构设计通过对学生信息管理系统的功能分析,可以定义出系统的总体结构模块图,如图3.1 所示。图 3.1 学生管理系统总体结构设计3.2 系

5、统管理流程图前面的分析中已经定义了系统各个模块,属于静态建模的范围。在系统运行时刻的动态模型应该由系统的流程决定。当用户运行该系统后可以来进行学生信息插入管理、学生信息查询管理、学生信息删除管理、学生信息修改管理及学生信息输出等操作,具体的流程如图 3.2 所示。学生成绩管理系统学生信息插入学生信息查询学生信息删除学生信息修改学生信息输出学生信息读取学生信息保存图 3.2 系统流程图主模块应负责应用程序的主界面,由它调用其他模块. 因此主模块应具有操作性好、界面清晰的特点,使用户能够很方便地找到所需功能。根据功能需求的结果分析,主界面应该由学生信息插入管理,学生信息查询管理、学生信息修改管理、

6、学生信息删除管理和学生信息输出管理组成, 可以通过输入相应的数字进入相应的功能模块。4 链表学生信息管理系统详细设计和系统实现系统总体设计完成后,就可以根据需求对各个模块来进行实现了。在本系统中需要编码实现的主要有学生信息插入、学生信息查询、学生信息修改、学生信息删除和学生信息输出等5 个模块。(1) 学生信息插入模块添加的信息包括学号( 不允许重复 ) 、姓名 ( 不允许重复 )、分数。流程图如下图4.1 所示。进入系统数据读入查询修改删除输出数据保存退出系统不保存y n 图 4.1 插入模块流程图本程序采用的是尾插法,就是每次将新申请的结点插在终端结点的后面,其执行过程如图4.2 所示。图

7、 4.2 尾插法建立单链表操作示意图(2) 学生信息查询模块按姓名和学号查找学生信息的流程图分别如下图4.3 所示。开始插入数据输入学生信息调用类成员函数采用单链表保存数据结束图 4.3 按姓名查找学生信息流程图在单链表中,即使知道被访问结点的位置i ,也不能像顺序表那样直接按序号访问,而只能从头指针出发,设置一个工作指针p,顺 next 域逐个结点往下搜索。当p 指向某个结点时判断是否为第i个结点,若是则查找成功;否则,将工作指针p 后移,即将p 指向原来所指结点的后继结点。直到 p 为 null时查找失败。 单链表查找过程如图 4.4 所示。图 4.4 单链表查找过程的示意图按学号查询学生

8、信息同按姓名查找学生信息,此处不再详细列出。结束输 入 要 查找姓名判断抱歉没有该学生输出该学生的信息按姓名查找开始n y (3) 学生信息修改模块首先要查找与要修改数据相匹配的信息,若没有则返回失败。否则把相应的信息输出,然后再重新输入新的数据并保存到单链表。(4) 学生信息删除模块当选择删除功能时,首先输入要删除的同学的姓名,然后输入要删除的同学的学号,如果该同学存在并且姓名与学号匹配的上,则进行删除操作,否则返回失败。其流程图4.5 如下:图 4.5 删除学生信息模块流程图删除操作定义为将单链表的第i 个结点删去。因为在单链表中结点 ai存储地址在其前驱结点ai-1的指针域,所以必须首先

9、找到ai-1的存储地址p,然后令p 的 next 域指向 ai 的后继结点,即把结点ai 从链上摘下来,最后释放结点ai的存储空间,如图4.6 所示。开始删除操作输入姓名输入学号姓名学号一致执行删除功能返回主菜单n y 图 4.6 在单链表中删除结点指针的变化情况(5) 学生信息输出模块从单链表表头遍历整个单链表,将所有数据输出。其部分代码如下: void function:show() char choose; student *temp; system(cls); temp=student_first-next; if(!temp) cout 文件无数据 nn endl; cout1. 返

10、回主菜单 choose; while(choose!=1) cout1. 返回主菜单 choose; menu(); else coutout(); temp=temp-next; cout1. 返回主菜单 choose; while(choose!=1) cout1. 返回主菜单 choose; menu(); 5 系统测试在完成了系统各方面的设计后,并不是可以运行就完成的,为了保证系统性能的稳定性跟安全性等,就要对系统做测试。测试环境如下:硬件 :p4c 2.4ghz ,80gb 硬盘, 512m 内存;软件 :windows xp personal sp2,分辨率 1024*768,mi

11、crosoft visual c+ 6.0。1. 这是链表的主界面2. 这是顺序表的主界面图 5.1 运行主界面我就以顺序表为例介绍一下我的学生信息管理系统吧选择 1 清空学生信息功能时,如图5.2 所示。图 5.2 插入学生成绩信息实现返回主菜单后选择3 插入学生成绩信息,4 删除学生信息,运行结果按由姓名特定位置删除和按学号删除两种分别如图5.3 和图 5.4 所示。图 5.3 按学生学号查找相关信息实现图 5.4 按学号查找相关信息实现当在主菜单中选择4 时,则进行删除功能。其运行结果如图5.5 所示。图 5.5 删除学生信息功能实现当在主菜单中选择6 时,则进行显示当前信息功能。其运行

12、结果如图 5.7 所示。图 5.7 输出学生信息功能实现6 结束语通过这次数据结构课程设计的实验,在解决问题的过程中,充分体会到了数据结构这门课程对于软件设计的重要性,也体会到了数据结构 +算法 =程序这句话的真正含义,一个实际问题的解决第一步就是要依赖于良好的抽象思维的,将实际问题转化为相应的数据结构,只有这一步做好了,才能采取相应的算法和优化方法解决问题和解决好问题。参考文献1 钱新贤,杨猛,程兆炜,张少东visual c+编程疑难详解m 北京:人民邮电出版社,2000 2 王红梅,胡明,王涛数据结构(c+)m 北京:清华大学出版社, 2007 3 程学先数据库原理与技术m 北京:中国水利

13、水电出版社,2001 4 alex kriegel & boris m.trukhnovsql biblem北京:电子工业出版社,2000 5 郑章,程刚,张勇visual c+6.0数据开发技术 m 北京:机械工业出版社,1999.9 6 f. brokken and k. kubat . c+ annotations. version 4.4.0m ,icce,university of groningen,netherlands ,1990. 250 280 附录 1:链表结构化设计源程序清单/ 程序名称: student.cpp / 程序功能:采用链表与文件实现一个简单的学生成

14、绩管理系统。#include #include #include #include #include using namespace std; struct class int chinese; int math; int english; ; class student public: student(); void ofile(ofstream &of); void infile(ifstream &f); void out(); void set(char *name,int no,class score); char *getname(); int getno(); s

15、tudent *next; protected: char name20; int no; class score ; ; student:student():next(0) char *student:getname()return name; int student:getno()return no; void student:set(char *name,int no,class score) strcpy(name,name); no=no; score=score; void student:infile(ifstream &f) fnamenoscore.chinesesc

16、ore.mathscore.english; / 将数据输入到文件 void student:ofile(ofstream &of) of name no score.chinese score.math score.english; /从文件中提取数据 void student:out() coutnametnotscore.chinesettscore.mathttscore.englishtnext; while(f1-next) f1=f1-next; do p=new student; cout 请输入您要添加的学生成绩信息:endl; coutname; while(f2)

17、 if(strcmp(f2-getname(),name)=0) cout 该学生已存在,请确定姓名!nn; coutname; break; f2=f2-next; coutno; coutscore.chinese; coutscore.math; coutscore.english; p-set(name,no,score); f1-next=p; p-next=null; f1=f1-next; cout 是否继续输入信息?(yn) choose; while(choose=y|choose=y); save(); cout1. 返回主菜单 choose; while(choose!=

18、1) cout1. 返回主菜单 choose; menu(); void function:delete() /删除信息函数 char name20; int no; char choose; student *temp,*p; system(cls); p=temp=student_first-next; coutname; coutno; while(temp) if(strcmp(temp-getname(),name)=0&temp-getno()=no) / 判断该学生信息是否存在 coutout(); coutchoose; if(choose=y|choose=y) p-

19、next=temp-next; delete temp; coutnext; save(); cout1. 返回主菜单 n2. 继续删除 choose; while(choose!=1&choose!=2) cout1. 返回主菜单 n2. 继续删除 choose; if(choose=1) menu(); else if(choose=2) delete(); void function:modify() /修改学生信息函数 char choose,name20; student *temp,*p; int no; class score; system(cls); temp=p=s

20、tudent_first; coutname; while(temp) if(strcmp(temp-getname(),name)=0) coutout(); coutname; coutno; coutscore.chinese; coutscore.math; coutscore.english; temp-set(name,no,score); break; temp=temp-next; save(); cout 修改成功 !endl; cout1. 返回主菜单 n2. 继续修改 choose; while(choose!=1&choose!=2) cout1.返回主菜单 n

21、2. 继续修改 choose; if(choose=1) menu(); else if(choose=2) modify(); void function:read() /读取信息函数 student *p,*p2; p=student_first; long t; ifstream is(student.txt,ios:in); if(!is) ofstream os(student.txt,ios:out); os.close(); return ; while(!is.eof() p2=new student; p2-infile(is); p-next=p2; p2-next=nul

22、l; p=p-next; void function:save() /保存学生成绩信息函数 ofstream of(student.txt,ios:out); student *p=student_first-next; while(p) p-ofile(of); p=p-next; of.close(); void function:search() int flag(0); char choose; char t120; int t2; system(cls); student *temp=student_first-next; do coutchoose; if(choose=1) co

23、utt1; while(temp) if(strcmp(t1,temp-getname()=0) flag=1; break; temp=temp-next; if(flag=0) coutn无该学生的信息nendl; else coutout(); break; else if(choose=2) coutt2; while(temp) if(t2=temp-getno() flag=1; break; temp=temp-next; if(flag=0) coutn无该学生的信息nendl; else coutout(); break; while(choose!=1|choose!=2)

24、; coutn1.返回主菜单 n2. 继续查询 choose; while(choose!=1&choose!=2) cout1. 返回主菜单 n2. 继续查询 choose; if(choose=1) menu(); else if(choose=2) search(); void function:show() char choose; student *temp; system(cls); temp=student_first-next; if(!temp) cout 文件无数据 nn endl; cout1. 返回主菜单 choose; while(choose!=1) cou

25、t1.返回主菜单 choose; menu(); else coutout(); temp=temp-next; cout1. 返回主菜单 choose; while(choose!=1) cout1. 返回主菜单 choose; menu(); void function:menu() time_t t; time(&t); char choose; system(cls); cout -版 权 所有:李 卉-endl; coutendl; cout*endl; cout 平 顶 山 学 院 欢 迎 你endlendl; cout 学 生 成 绩 信 息 管 理 系 统endlend

26、l; cout 显示系统时间和日期: ctime(&t)endl; cout*endlendl; cout 请选择您需要的操作, 选择相关操作请输入相对的括号里的阿拉伯数字!endl; coutn; cout 1 录入学生成绩信息:nendl; cout 2 查询学生成绩信息:nendl; cout 3 删除学生成绩信息:nendl; cout 4 修改学生成绩信息:nendl; cout 5 显示全部学生成绩信息:nendl; cout 6 退出系统 endl; coutchoose; switch(choose) case 1: add();break; case 2: searc

27、h();break; case 3: delete();break; case 4: modify();break; case 5: show();break; case 6: exit(1);break; default: cout 请按规定输入选择项!endl; menu(); void main() function function; /定义功能接口function.menu(); /调用主菜单 附录 2:链表结构化设计源程序清单#define list_init_size 10 /确定分配空间大小#include #include #include #include /getch()

28、 #include typedef struct student /学生信息结构体类型char no100; char name7; float score; ; typedef struct /定义顺序类型sqlist student *stu; /指向数据元素的基地址int length; /线性表的当前长度int listsize; sqlist; / 下面是函数的原型声明int initlist(sqlist &sl); /顺序表初始化int creat(sqlist &sl);/顺序表的建立int insertlist(sqlist &sl,student e

29、lem,int pos);/顺序表的插入操作int search(sqlist sl,int pos);/按指定位置删除int dele_elem1(sqlist &sl,int pos,student &elem);/顺序表的按位置删除操作int dele_elem2(sqlist &sl,char *num,student &elem);/顺序表的按学号删除int out_list(sqlist sl);/顺序表的输出操作/主函数 / void main() coutnn欢 迎 使 用 学 生 信 息 查 询 系 统 , 请 按 提 示 使用!nnn; sq

30、list sl; initlist(sl); student s; char number9; int pos; while(1) cout n 以下程序是使用顺序表实现的:n; cout n 0126程正炉请您选择您要执行的操作:n; coutendlendl; cout 1、清空顺序表 2 、创建顺序表 3 、插入信息 4 、删除信息5、查找信息 6 、显示当前信息 0 、退出系统 n; coutn; if(n=0)/退出 coutn谢谢您的使用 , 该系统是11 电商一班的程正炉设计,多谢你的使用!n; break; else if(n=1)/清空 coutc; if(c=n) brea

31、k; else initlist(sl);cout顺序表已清空! 您可以继续其他操作 !nn; else if(n=2)/创建 coutc; if(c=n) break; else creat(sl); else if(n=3)/插入 cout 输入插入学生信息:n; couts.no; ; couts.score; insertlist(sl,s,pos); else if(n=4)/删除功能 int m; cout1 、我想按输入特定位置删除n; cout2 、我想按输入学生学号删除n; coutm; coutendl; if(m=1) dele_elem1(sl,po

32、s,s); else if(m=2) coutnumber; dele_elem2(sl,number,s); coutendl; else if(n=5) int num; coutnum; search(sl,num); else if(n=6)/显示out_list(sl); else if(n!=0|n!=1|n!=2|n!=3|n!=4|n!=5|n!=6) cout 您的输入有误,请重新输入!n; /while /函数定义 / int initlist(sqlist &sl) sl.stu =(student *)malloc(list_init_size*sizeof(s

33、tudent); if(!sl.stu) return 0; cout 分配失败! n; sl.length=0; sl.listsize=list_init_size; return 1; /创建操作 / int creat(sqlist &sl) cout 下面创建学生信息查询系统,请按提示输入数据:n; sl.length=0; int m; /用于记数coutm;cout名n; for(int i=1;i=m;i+) cout请输入第 isl.stui-1.no; coutendl; cout 请输入第 ; coutendl; cout 请输入第

34、 isl.stui-1.score ; coutendl; sl.length+; coutn本次操作您一共输入了m名数据 n; return 1; /插入操作 / int insertlist(sqlist &sl,student elem,int pos) coutpos; if(possl.length+1) cout您要插入的位置不存在,请检查!n; return 0; struct student *p; for(p=sl.stu;pno,elem.no )=0) cout对不起!输入的学号已存在,请输入其它学号 !n; cout该学号在系统中代表的信息为:n; cout学号 :noendl; cout姓名 :nameendl; cout成绩 :score=q;-p) *(p+1)=*p; *q=elem; +sl.length

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论