版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1需求分析1.1研究背景教育信息化必将涉及许多具体的技术和机器在教育中的应用,它使得一些人往往以技术论,机器论的观点来认识教育信息化的目的,认为教育信息化就是以机器代替教师讲课,代替教育写板书 ,就是以电子教材代替印刷教材,就是实现网上学习,并以代替性、省力性、顺利性、效率性作为评价教育信息化的尺度。而成绩管理系统将大大的提高老师的管理效率,使得老师可以针对学生的具体情况进行深入教育,培养跨世纪的创新人才,是实现教育的现代化。教育信息化应以新的教育思想、教育观念指导信息技术在教育的各个部门、各个领域广泛应用,应根据创新人才培养的要求,利用信息技术,探索新的教育模式,促进教育现代化。只有在这样的
2、基础上指导信息技术的教育应用,才是我们所需要的教育信息化。也就相应产生了对学生成绩的高效管理。1.2课题研究的目的及意义 现在我国各院高校的学生成绩管理水平普遍不高,有的还停留在纸质基础上,这种管理手段已不能适应时代的发展,因为它浪费了许多的人力和物力。在当今信息时代这种传统的管理方法必然会被计算机为基础的信息管理系统所代替。成绩管理系统提供了强大的管理功能,方便管理员对考试成绩等信息的添加、修改、删除、查询、分类等操作。本系统将提高管理人员的工作效率和工作质量。如今,计算机网络带动了全球信息化得进程。在高校中,信息化带来的传统教学、科研模式的变化,需要新的管理机制:以信息技术为手段的校务管理
3、,也需要新的机制,即需要一个数字化的校园(Digital Campus)。数字校园的建设也是高校信息化的重要组成部分。成绩管理是学校管理中的异常重要的一个环节,作为学校,除了育人,就是与育知,学生成绩管理的计算机化是整个学校教务管理中的重要一部分,能否实现这一步关系到学校办学整体效率的高低,在于它的重要性,学生成绩管理系统的开发与应用就逐渐提入议程,并占着重要的分量。运用成绩管理系统可以减轻学院教学人员的工作量,加快查询速度,加强管理,以及国家各部门关于信息化的步伐,是各项管理更加规范化。同时也可以是学生能够尽快知道自己的考试成绩,投入新的课程的学习或复习。并且也可为高校教育在未来市场的竞争力
4、的提高打下坚实的基础。1.3课题要求1.以线性链表存储包括学号、姓名、c语言成绩的学生信息。2.在程序执行过程中,根据输出的提示信息,通过键盘输入程序中的运算命令;相应的输入数据和运算结果显示在其后。3.程序执行命令包括:<1>.输入学生信息<2>.显示全部信息<3>.查询学生信息<4>.删除学生信息<5>.插入学生信息<6>.修改学生信息<7>.显示分类信息<0>.退出系统2概要设计2.1 抽象数据类型定义为实现上述程序功能,以线性链表为存储结构,为此,进行抽象数据类型定义:ADT Student
5、 数据对象:D=e1,e2,e3|e1,e2,e3student(储存学生信息的结构体)数据关系:R=<e1,e2,e3>基本操作P:creatList(&L)操作结果:构造一个空的线性链表。 getelem(L,e ,&p);初始条件:线性链表L已存在。操作结果:在L中查找含有e元素的p节点是否存在,若存在则返回OK,否则返回ERROR。input(&L);初始条件:线性链表L已存在。操作结果:向链表尾插入新节点信息。 all(&L);初始条件:线性链表L已存在。操作结果:显示线性链表L的所有节点信息。 list(&L);初始条件:线性链表
6、L已存在。操作结果:查询是否存在给定信息的节点,若存在则返回OK,否则返回ERROR。 dele(&L);初始条件:线性链表L已存在。操作结果:删除给定信息的节点,若成功则返回OK,否则返回ERROR。 append(&L);初始条件:线性链表L已存在。操作结果:在给定的信息节点后插入所输入的信息节点,若成功则返回OK,否则返回ERROR。 modify(&L);初始条件:线性链表L已存在。操作结果:查询所输入的信息结点,并修改其信息。classify(&L);初始条件:线性链表L已存在。操作结果:按照给定的条件将所有结点信息分类,并输出各类别信息。 ADT S
7、tudent2.2 程序流程图开始 NO输入口令 主菜单 NO 选择的序号是否符合要求 Yes修改学生信息退出系统显示分类信息插入学生信息删除学生信息查询学生信息显示全部信息输入学生信息3详细设计3.1 存储结构及方式本系统得学生信息采用结构体student定义,并用单链表存储: typedef struct studentchar num13;/学号char name15;/姓名int score;/c语言成绩student;typedef struct node student data;/数据域 struct node *next;/指针域stunode,*pstunode;3.2 主要
8、的功能函数1,输入学生信息:调用函数Status input(pstunode &head),首先判断输入的合法性,后将该条信息添加到链表尾部,用于选择是否继续输入,否则返回主菜单。其代码如: Status input(pstunode &head)/输入学生信息 system("cls"); char m;while(m='y'|m='Y');return OK; 2,显示全部学生信息:调用函数Status all(pstunode &head),其代码如: Status all(pstunode &head
9、)/显示全部信息 system("cls"); pstunode p; system("pause"); return OK; 3,查询学生信息:调用函数Status list(pstunode &head),提示输入要查询的学生学号,并判断其合法性,后将信息输出,并退出返回主菜单。代码如: Status list(pstunode &head)/查询学生信息 system("cls"); char num313; system("pause"); return OK;4,删除学生信息:调用函数St
10、atus dele(pstunode &head),提示输入要删除的学生学号,判断其是否存在,若存在则将其从链表中删除,提示删除成功后退出并返回主菜单。代码如: Status dele(pstunode &head)/删除学生信息system("cls");char num113;system("pause");return OK;5,插入学生信息:调用函数Status append(pstunode &head),提示输入学生学号,判断其合法性,然后输入要插入的学生信息,并将其插入该节点之后,退出并返回主菜单。代码如: Stat
11、us append(pstunode &head)/插入学生信息system("cls");system("pause");return OK;6,修改学生信息:调用函数Status modify(pstunode &head),提示输入要修改的学生学号,验证合法性后进行修改,修改成功退出并返回主菜单。其代码如: Status modify(pstunode &head)/修改学生信息system("cls"); system("pause");return OK;7,显示分类信息:调用函数
12、Status classify(pstunode &head),按照60分以下、6079分、8089分、90分以上进行学生信息分类,并显示。其代码如: Status classify(pstunode &head)/显示分类信息 system("cls"); system("pause"); return OK;8,查找学生信息:调用函数Status getelem(pstunode head,char number11,pstunode &p)。其代码如: Status getelem(pstunode head,char nu
13、mber11,pstunode &p)/查找学生信息p=head->next;return OK;9,保存学生信息:调用函数Status save(pstunode &head),将输入的全部信息保存在c盘下的sort文件中。其代码如: Status save(pstunode &head)/保存学生信息ofstream out; out.open("c:sort.txt"); for(pstunode p=head->next;p;p=p->next) out<<p->data.num<<"
14、t"<<p-><<"t"<<p->data.score<<endl; out.close(); return OK;10,读文件:调用函数Status start(pstunode &head),在c盘下查找sort文件,并将数据读入。其代码如: Status start(pstunode &head)/读文件 pstunode p,q; system("pause"); return OK;4 调试分析经过一周的代码编写与调试,我终于将各个模块整合了
15、起来,在这个过程中,我遇到了很多问题,如数据未定义,括号不匹配,漏掉分号等简单语法错误,同时也有如循环条件判断错误导致死循环,指针使用前未赋值导致系统报错,逻辑错误而无法产生正确结果等较复杂情况。但经过自己的不断查阅资料,不断重新编写终于解决了这些问题。同时考虑到程序的健壮性要求,我增加了该系统对不合法数据的识别功能,并能够及时反馈给用户。每一件事,过程才是最美好的,我写完一个功能模块,进行不断调试,当看到期待的结果展现在面前时,由衷的喜悦溢于言表;特别当所有功能模块整合到一块后,经过调试能被主函数成功调用时,那感觉太妙了。总的来说,本次课程设计,令人受益匪浅。对数据结构这门课程学习了很多理论
16、知识,但是理论与实践的距离很大,开始时对结构体,对链表的体会只是在意识层面,而通过这次课程设计,真真正正的运用它们来储存学生信息时,我才认识到它们都是很好的工具,仿佛也有了可触的感觉。同时,我也深深体会到自己的C语言知识还是那么浅薄,而这次也让自己动手能力和独立思考能力有了很大的提高。5 用户手册1. 本程序的运行环境为WINDOWS操作系统,运行软件为Microsoft Visual C+;2. 开始运行程序,输入登录密码“ting”,开始进入主菜单。3. 若用户首次登陆,则应首先进行学生信息录入,否则即可按照主菜单的选项选择所要执行功能,须进行合法的数据输入。4. 当输入1,则进行学生信息
17、输入操作,按要求输入学号(小于12位整数),姓名(小于15的字符串),每次均用回车键结束输入。5. 当输入2,则显示已录入全部学生信息。6. 当输入3,则进行学生信息查询操作,用户需要输入所要查询学生的学号或姓名,若该学生信息存在,则系统会显示该学生的全部信息。7. 当输入4,则进行删除学生信息操作,用户需要输入所要删除的学生学号,若该学号存在,系统会将其删除。8. 当输入5,则进行插入学生信息操作,该操作是在已经录入的一位学生后插入新学生信息。用户需要首先输入该已录入的学生学号,后输入新学生信息。9. 当输入6,则进行修改学生信息操作,用户需要输入需要修改的学生学号或姓名,若该学生信息存在,
18、则会提示继续输入修改信息,否则退出返回主菜单。10. 当输入7,则按照c语言成绩将学生信息以60分以下、6079分、8089分、90分以上等级别进行分类并显示。11. 当输入0,则退出系统,并保存最终的所有学生信息,程序运行完毕。6 测试数据及结果1,使用密码,首次进入学生记录簿信息管理系统:2,进入系统界面,对不合法输入做出判断:3,选择1,输入学生信息,并对不合法输入作出判断:4,显示全部信息:5,查询学生信息:6,删除学生信息,并对不合法输入作出判断,后显示结果:7,插入学生信息,后显示结果:8,修改学生信息,对不合法输入做出判断,后显示结果:9,显示分类信息:10,退出系统并保存信息,
19、所输入信息将保存在C盘下的sort文件下。 参考文献1 严蔚敏,吴伟民编著. 数据结构(C语言版). 北京:清华大学出版社,1997.042 孟爱国,左利芳,谢中科等编著.C语言程序设计.上海:复旦大学出版社,2010.23 马春江, 李慧勇, 孟繁军编著. 新编数据结构教程.北京: 中国电力出版社,20064 孙淑霞,肖阳春,魏琴等.C/C+程序设计教程(第2版)。北京:电子工业出版社,2007.035 谭浩强。C+程序设计。北京:清华大学出版社,2004,066 朱战立编著.数据结构使用C+语言.西安:西安电子科技大学出版社,2001.27 缪淮扣,顾训穰,沈俊编著.数据结构:C+实现.北
20、京:科学出版社,2002附录 源代码程序#include <fstream.h>#include "iostream.h"#include "string.h"#include <conio.h>#include "iomanip.h"#include "stdlib.h"#define ERROR 0#define OK 1#define N 2typedef int Status;typedef struct studentchar num13;/学号char name15;/姓名int
21、 score;/c语言成绩student;typedef struct node student data;/数据域 struct node *next;/指针域stunode,*pstunode;Status getelem(pstunode head,char number11,pstunode &p);/查找学生信息Status input(pstunode &head);/输入学生信息Status all(pstunode &head);/显示全部信息Status list(pstunode &head);/查询学生信息Status dele(pstun
22、ode &head);/删除学生信息Status append(pstunode &head);/插入学生信息Status modify(pstunode &head);/修改学生信息Status classify(pstunode &head);/显示分类信息void password()/使用密码进入 char str17; system("cls"); cout<<endl<<endl<<endl; cout<<setw(30)<<"请输入口令:" cin&
23、gt;>str1; cout<<endl<<endl<<endl; if (strcmp(str1,"ting")!=0) cout<<setw(40)<<"口令不正确!请重新输入!n" system("pause"); password(); return;char menu()/主菜单 system("cls");int n=1;char select;cout<<endl<<endl<<endl;cout&l
24、t;<setw(19)<<""<<"*主菜单*"<<endl<<endl;cout<<setw(26)<<""<<n+<<".输入学生信息"<<endl<<endl;cout<<setw(26)<<""<<n+<<".显示全部信息"<<endl<<endl;cout<<
25、setw(26)<<""<<n+<<".查询学生信息"<<endl<<endl; cout<<setw(26)<<""<<n+<<".删除学生信息"<<endl<<endl; cout<<setw(26)<<""<<n+<<".插入学生信息"<<endl<<endl; cou
26、t<<setw(26)<<""<<n+<<".修改学生信息"<<endl<<endl;cout<<setw(26)<<""<<n+<<".显示分类信息"<<endl<<endl;cout<<setw(26)<<""<<"0.退出系统"<<endl<<endl<<e
27、ndl;cout<<setw(22)<<""<<"请选择:"cin>>select;if(select>='0'&&select<='7'); elsecout<<endl<<setw(26)<<"非法数据!请重新输入!"system("pause");select=menu();return select; char Exit()/退出系统 system("cl
28、s");char s;cout<<setw(36)<<"确定退出系统请输入"Y"或"y" "<<endl;cin>>s;return s; void creatList(pstunode &head)/建立带表头空链表 head=(pstunode)malloc(sizeof(stunode); if(!head) exit(0); head->next=NULL; Status input(pstunode &head)/输入学生信息 system(&q
29、uot;cls"); char m; char s50; int i,k; pstunode p,q,frist,last; for(q=head;q->next;q=q->next);last=q;dofrist=( pstunode)malloc(sizeof(stunode);if(!frist) return ERROR;cout<<setw(25)<<"请输入学生学号: "do/学号过长或为非整数时则重新输入 k=1;cin>>s; if(strlen(s)<=12) strcpy(frist->
30、;data.num,s); else k=0;cout<<"您输入的学号过长(小于12位),请重新输入:"/学号过长则重新输入 for(i=0;si!=0;i+) if(si>='0'&&si<='9') continue; else k=0;cout<<"您输入的学号为非整数,请重新输入: "break; while(k=0); for(p=head->next;p;p=p->next) if(strcmp(frist->data.num,p->
31、data.num)=0)/如果学号输入重复则退出 free(frist); cout<<"该学号已存在!"<<endl; system("pause"); return ERROR; cout<<setw(25)<<"请输入学生姓名: " do/姓名过长则重新输入 k=1;cin>>s; if(strlen(s)<=15) strcpy(frist->,s); else k=0;cout<<"您输入的姓名过长(小于15位),
32、请重新输入:" while(k=0); cout<<setw(25)<<"请输入该学生c语言成绩: " cin>>frist->data.score; frist->next=NULL; last->next=frist; last=frist; cout<<endl<<endl; cout<<"继续输入请按"y"或"Y",否则按任意键结束输入:"<<endl; m=getch(); cout<&l
33、t;m<<endl;while(m='y'|m='Y');return OK; Status all(pstunode &head)/显示全部信息 system("cls"); pstunode p; p=head->next; if(!head->next) cout<<"该系统学生信息为空!"<<endl;system("pause"); return ERROR; else while(p) cout<<"学号:&quo
34、t;<<setiosflags(ios:left)<<setw(13)<<p->data.num<<"姓名:"<<setw(15)<<p-><<"该学生的c语言成绩为:"<<p->data.score<<endl; p=p->next; cout<<endl<<endl; system("pause"); return OK; Status all2(pstuno
35、de &head)/显示全部信息,为classify()所特殊调用 pstunode p; p=head->next; if(!head->next) cout<<"该类学生信息为空!"<<endl<<endl<<endl; return ERROR; else while(p)cout<<"学号:"<<setiosflags(ios:left)<<setw(13)<<p->data.num<<"姓名:"
36、;<<setw(15)<<p-><<"该学生的c语言成绩为:"<<p->data.score<<endl; p=p->next; cout<<endl;cout<<endl<<endl; return OK; Status list(pstunode &head)/查询学生信息 system("cls"); char num313; pstunode p; if(!head->next) cout<<
37、;"该系统学生信息为空!"<<endl;system("pause"); return ERROR; cout<<"请输入您想查询的学生学号或者姓名:"<<endl; cin>>num3; if(!getelem(head,num3,p) return ERROR;/查找,若不成功则退出 cout<<"该学生学号是:"<<p->data.num<<endl; cout<<"该学生姓名是:"<
38、;<p-><<endl; cout<<"该学生c语言成绩为:"<<p->data.score<<endl; cout<<endl; system("pause"); return OK; Status dele(pstunode &head)/删除学生信息system("cls");char num113;pstunode p1,p2;/p1为要删除的节点,p2为其前一个节点 if(!head->next) cout<&
39、lt;"该系统学生信息为空!"<<endl;system("pause"); return ERROR;cout<<"请输入要删除的学生学号"<<endl;cin>>num1;p1=head->next;while(strcmp(p1->data.num,num1)!=0&&p1->next!=NULL)p2=p1;p1=p1->next ;if(strcmp(p1->data.num,num1)=0)if(p1=head->next)
40、head->next=p1->next;else p2->next=p1->next;free(p1);cout<<"学号为"<<num1<<"的学生的信息已删除!"<<endl;else cout<<"学号"<<num1<<"不存在!"<<endl;system("pause");return ERROR;system("pause");return OK
41、; Status append(pstunode &head)/插入学生信息system("cls");char num13;char s50;int i,k; if(!head->next) cout<<"该系统学生信息为空!"<<endl;system("pause"); return ERROR;pstunode p1,p2,p3;/p1为指向要插入的前驱节点,p2指向要插入的新节点,p3用于循环cout<<"请输入你要在该学生后插入新学生信息,则其学号为:"
42、<<endl;cin>>num;cout<<endl; if(!getelem(head,num,p1) return ERROR;/查找,若不成功则退出p2=(pstunode)malloc(sizeof(stunode);cout<<"请输入您想插入的学生学号,姓名,c+成绩:"<<endl;do/学号过长或为非整数时则重新输入 k=1;cin>>s; if(strlen(s)<=12) strcpy(p2->data.num,s); else k=0;cout<<"
43、;您输入的学号过长(小于12位),请重新输入:"/学号过长则重新输入 for(i=0;si!=0;i+) if(si>='0'&&si<='9') continue; else k=0;cout<<"您输入的学号为非整数,请重新输入: "break; while(k=0); for(p3=head->next;p3;p3=p3->next)/如果学号输入重复则退出 if(strcmp(p2->data.num,p3->data.num)=0) cout<<&
44、quot;该学号已存在!"<<endl; system("pause"); return ERROR; cout<<setw(25)<<"请输入学生姓名: "do/姓名过长则重新输入 k=1;cin>>s; if(strlen(s)<=15) strcpy(s,p2->); else k=0;cout<<"您输入的姓名过长(小于15位),请重新输入:"while(k=0); cout<<setw(25)<<&qu
45、ot;请输入该学生c语言成绩: "cin>>p2->data.score;p2->next=p1->next;p1->next=p2;system("pause");return OK; Status modify(pstunode &head)/修改学生信息system("cls");pstunode p;char num13;char s50;int i,k; if(!head->next) cout<<"该系统学生信息为空!"<<endl;sys
46、tem("pause"); return ERROR;cout<<"请输入要修改的学生的学号或姓名: "cin>>num;if(!getelem(head,num,p) return ERROR; /查找,若不成功则退出 cout<<"请输入该学生的学号: " do/学号过长或为非整数时则重新输入 k=1;cin>>s; if(strlen(s)<=12) strcpy(s,p->data.num); else k=0;cout<<"您输入的学号过长(小
47、于12位),请重新输入: "/学号过长则重新输入 for(i=0;si!=0;i+) if(si>='0'&&si<='9') continue; else k=0;cout<<"您输入的学号为非整数,请重新输入: "break; while(k=0); cout<<"请输入学生姓名: "do/姓名过长则重新输入 k=1;cin>>s; if(strlen(s)<=15) strcpy(p->,s); else k=0;
48、cout<<"您输入的姓名过长(小于15位),请重新输入:"while(k=0);cout<<"请输入学生c语言成绩: "cin>>p->data.score; system("pause");return OK; Status classify(pstunode &head)/显示分类信息 system("cls"); pstunode p,q1,q2,q3,q4,s; pstunode L1,L2,L3,L4; creatList(L1); creatList(
49、L2); creatList(L3); creatList(L4); q1=L1; q2=L2; q3=L3; q4=L4; if(!head->next) cout<<"该系统学生信息为空!"<<endl;system("pause"); return ERROR; for(s=head->next;s;s=s->next) p=( pstunode)malloc(sizeof(stunode); if(!p) return ERROR; if(s->data.score<60) strcpy(p-
50、>,s->);strcpy(p->data.num,s->data.num);p->data.score=s->data.score;/复制数据 p->next=NULL;q1->next=p;q1=p; else if(s->data.score>=60&&s->data.score<80) strcpy(p->,s->);strcpy(p->data.num,s->data.num);p->data.s
51、core=s->data.score;/复制数据 p->next=NULL;q2->next=p;q2=p; else if(s->data.score>=80&&s->data.score<90) strcpy(p->,s->);strcpy(p->data.num,s->data.num);p->data.score=s->data.score;/复制数据p->next=NULL;q3->next=p;q3=p; else if(s->data
52、.score>=90) strcpy(p->,s->);strcpy(p->data.num,s->data.num);p->data.score=s->data.score;/复制数据 p->next=NULL;q4->next=p;q4=p; cout<<"(1)60分以下者学生信息:"<<endl<<endl; all2(L1); cout<<"(2)6079分学生信息:"<<endl<<endl; all2(L2); cout<<"(3)8089分学生信息:"<<endl<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大学开学典礼
- 家用电器安全教育
- 初级会计经济法基础-2025初级会计《经济法基础》模拟试卷242
- 2024年中国数字资产信贷融资行业市场发展趋势预测报告-智研咨询重磅发布
- 基于无约束优化的路侧雷视联合外参标定方法研究
- 2025版校学校教职工福利采购合同审核要点2篇
- 二零二五版工程投标担保书规范模板3篇
- 2025年度个人医疗保健服务协议书2篇
- 二零二五年度旅游产品销售业绩达标合同范本3篇
- 二零二五年度跨境电商销售合同重要性分析及税务筹划3篇
- 电缆挤塑操作手册
- 浙江宁波鄞州区市级名校2025届中考生物全真模拟试卷含解析
- 招标监督报告
- 项目立项申请书
- 西方法律思想史ppt
- 干部职工文明守则和行为规范(完整版)
- 世界古代史-对接选择性必修 高考历史一轮复习
- 格式塔心理学与文艺心理学
- (汽车制造论文)机器人在汽车制造中应用
- 食管癌护理查房20352
- T-CASAS 004.2-2018 4H碳化硅衬底及外延层缺陷图谱
评论
0/150
提交评论