




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+课程设计报告摘要:随着科学技术的发展,计算机领域不断取得新的研究成果。计算机在代替和延伸脑力劳动方面发挥越来越重要的作用,不仅在工业方面而且在日常生活中也越来越离不开计算机。尤其是在学校里,要处理大量的学生数据。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用.作为计算机应用的一部分,使用计算机对学生成绩信息进行管理,有着手工管理所无法比拟的优点。学生成绩管理系统能方便用户迅速、准确处理学生的成绩,得到想要的数据并能将学生的信息以文档保存。本文介绍了简易学生成绩管理系统在Microsoft Visual C+ 6.0环境下的实现过程:系统的分析,功能模块的设计,系统的调试和测试。此系统的主要管理的信息有:学生的班级,学号,姓名和三(可以更改)门课的成绩。本系统的主要功能有学生成绩的添加、删除、插入、显示,能对学生成绩按分数或学号进行排序,可以根据用户的要求按班级,姓名,学号查询学生的成绩信息,计算每位学生的总分,分类汇总统计每门课的的总分均分能保存信息到文件以及从文件中读取信息等功能。关键词:学生成绩管理系统;功能模块(函数);指针;结构;链表;文件保存及读取。 目录1 需求分析41.1功能需求分析:41.11学生成绩的读入和写出模块41.12学生成绩输入删除模块41.13学生成绩的查询模块51.14学生成绩的分类汇总模块51.2 环境需求分析:51.3 方法需求分析52概要设计62.1 系统功能模块图62.2 设计思想:63详细设计73.1 设计原理73.2程序详细代码描述73.3系统界面214调试与操作说明214.1调试过程214.2操作说明23总 结24致 谢251 需求分析1.1功能需求分析:简易学生成绩管理系统主要有4个大的模块:学生成绩从文件读入和写入,学生成绩的输入和删除,学生成绩信息的查询,以及学生成绩的分类汇总。1.11学生成绩的读入和写出模块主要功能是读出要管理的成绩文档,保存修改后的成绩文档。实际生活中学生成绩的文件主要以word或excel保存,为了方便操作我在调式本系统中成绩文件采用了txt的文档格式保存,当然以word文档形式保存也是可以的。1.12学生成绩输入删除模块主要功能是输入、追加、删除学生成绩的操作。添加操作是根据用户的要求实现的。例如用户可以输入要删除学生的学号删除学生的信息。此程序输入学生成绩时就计算个人的总分,并保存到数据结构中相应的变量中。1.13学生成绩的查询模块主要功能是按照用户的要求查询学生的成绩。其中用户可以选择查询单个学生的成绩还是某个班级的成绩,成绩查询中包括个人学生的总分,。1.14学生成绩的分类汇总模块统计主要功能是某个班级的每门学科的总分。1.2 环境需求分析:操作系统: Windows XP开发软件: Visual C+ 6.01.3 方法需求分析由于数组存放数据的时候要先确定数组的规模,不能动态的分配内存空间,而单链表是非连续存放的,可以对内存空间进行动态分配,此系统是用单链表完成的。然后定义链表的结点类型为结构就可以实现对学生学号、姓名、成绩、班级等学保存。 每次只要返回头指针,就可以对整个链表进行操作,因此选链表来存放学生信息。2概要设计2.1 系统功能模块图学 生 成 绩 管 理 系 统 链表的初始化 输入学生成绩删除学生成绩显示学生成绩按姓名找学生保存学生成绩读取学生成绩计算总分学生成绩排序按学号查成绩分类合计2.2 设计思想:学生成绩管理系统是用面向对象的方法设计,由于数组的存放是连续的,而单链表是非连续存放的,是动态分配内存空间,因此此系统采用单链表来完成。各个功能模块的实现主要转变到对单链表的遍历,添加和删除结点。3详细设计3.1 设计原理 学生成绩管理系统以菜单选择,通过调用各个函数,对单链表的遍历,实现不同的功能,不同函数处理后返回的只是一个头结点,但是通过头结点可以找到所有链表中的信息,只要有函数,找到头指针就能进行相应的操作,所以模块化的程序方便以后添加或者删除某些功能,程序中通过system(“cls”)清屏函数实现界面的转换,主函数中的循环保证程序不会退出,一个循环和一个清屏函数实现了主菜单和各子画面的切换(子函数)。这样的话各个子函数都可以调用一开始输入的数据,这样就实现了各个不同函数调用时都能使用整个系统连续起来了。作为一个学生成绩管理系统,增加了文件的读入和写出功能,增加了程序的实用性。3.2程序详细代码描述#include #include #include #include using namespace std; #define max 100; class student public: student *next; public: string name;/姓名 long num;/学号 int x,y,z;/数学,计算机,英语 int AA;/总分 void play()coutname学生的学号是num,数学:x,计算机:y,英语:z,总分:AAnext; delete stu; stu=p; stu=0; void sadd(); /添加 void sremove(); /删除 void samend(); /修改 void ssearch(); /查询 void staxis(); /排序 void ssave(); /保存 void sload(); /读取 /排序函数 void pxh(); void psx(); void pyw(); void pyy(); void pAA(); private: student *stu; /头接点 ; void cla:sadd()/添加 student *q; string name1; long num1; int x1,y1,z1; system(cls); coutn *增加的学生* nendl; cout请输入学生的(中间用空格间隔) endl; cout姓名 学号 数学成绩 计算机成绩 英语成绩:name1num1x1y1z1; q=new student(name1,num1,x1,y1,z1); q-next=0; q-AA=x1+y1+z1; if(stu) student *t; t=stu; if(t-num=num1) cout学号已存在,请重新输入next) if(t-num=num1) cout学号已存在,请重新输入next; t-next=q; else stu=q; cout输入完毕endl; void cla:sremove()/删除 system(cls); int num1; coutn* 删除学生信息 *n; coutnum1; /查找要删除的结点 student *p1,*p2; p1=stu; while(p1) if(p1-num=num1) break; else p2=p1; p1=p1-next; /删除结点 if(p1!=NULL)/若找到结点,则删除 p1-play(); cout确定删除吗?Y/Nc; if(toupper(c)!=Y) return; if(p1=stu) /若要删除的结点是第一个结点 stu=p1-next; delete p1; else /若要删除的结点是后续结点 p2-next=p1-next; delete p1; cout找到学号为num1的学生,并删除n; else /未找到结点 cout未找到想要删除的学生!n; void cla:samend()/修改 system(cls); long num1; coutn* 修改学生信息 *n; coutnum1; /查找要修改的结点 student *p1,*p2; p1=stu; while(p1) if(p1-num=num1) break; else p2=p1; p1=p1-next; if(p1!=NULL) cout学号是num1的学生的信息endl; cout姓名 name数学x计算机y英语zendl; cout请输入修改后的信息:姓名 数学成绩 计算机24 成绩 英语成绩p1-namep1-xp1-yp1-z; p1-AA=p1-x+p1-y+p1-z; cout修改成功endl; else /未找到接点 cout未找到!n; void cla:ssearch()/查询 system(cls); coutn* 查询学生信息 *nendl; cout请输入查询方式:endl; cout1.按学号查询endl; cout2.按姓名查询endl; cout3.返回c; switch (c) case 1: long num1; cout要查询的学号num1; /查找要查询的结点 student *p1,*p2; p1=stu; while(p1) if(p1-num=num1) break; else p2=p1; p1=p1-next; if(p1!=NULL) cout学号是num1的学生的信息endl; cout姓名:name 数学:x 计算机:y 英语:zendl; cout查询完毕.; else /未找到接点 cout未找到!n; break; case 2: string name1; cout要查询的学生姓名name1; /查找要查询的结点 student *p1,*p2; p1=stu; while(p1) if(p1-name=name1) break; else p2=p1; p1=p1-next; if(p1!=NULL) coutname1的学生的信息endl; cout学号:num 数学:x 计算机:y 英语:zendl; cout查询完毕.; else /未找到接点 coutnext) n+; p1=p1-next; cout共有n条信息.endl; int i; p1=stu; for(i=1;inump1-next-num) / 如果头结点大于第二个的 p2=p1-next; p1-next=p1-next-next; p2-next=p1; /头结点交换 stu=p2; p1=stu; while(p1-next-next) /中间的交换 p2=p1; p1=p1-next; if(p1-nump1-next-num) p2-next=p1-next; p1-next=p1-next-next; p2-next-next=p1; p1=p2-next; /交换 p1=stu; do p1-play(); p1=p1-next; while(p1); void cla:psx()/按数学成绩排序 student *p1,*p2; int n; p1=stu; n=1; while(p1-next) n+; p1=p1-next; cout共有n条信息.endl; int i; p1=stu; for(i=1;ixp1-next-x) / 如果头结点大于第二个的 p2=p1-next; p1-next=p1-next-next; p2-next=p1; /头结点交换 stu=p2; p1=stu; while(p1-next-next) /中间的交换 p2=p1; p1=p1-next; if(p1-xp1-next-x) p2-next=p1-next; p1-next=p1-next-next; p2-next-next=p1; p1=p2-next; /交换 p1=stu; do p1-play(); p1=p1-next; while(p1); void cla:pyw()/按语文成绩排序 student *p1,*p2; int n; p1=stu; n=1; while(p1-next) n+; p1=p1-next; cout共有n条信息.endl; int i; p1=stu; for(i=1;iyp1-next-y) / 如果头结点大于第二个的 p2=p1-next; p1-next=p1-next-next; p2-next=p1; /头结点交换 stu=p2; p1=stu; while(p1-next-next) /中间的交换 p2=p1; p1=p1-next; if(p1-yp1-next-y) p2-next=p1-next; p1-next=p1-next-next; p2-next-next=p1; p1=p2-next; /交换 p1=stu; do p1-play(); p1=p1-next; while(p1); void cla:pyy()/按英语成绩排序 student *p1,*p2; int n; p1=stu; n=1; while(p1-next) n+; p1=p1-next; cout共有n条信息.endl; int i; p1=stu; for(i=1;izp1-next-z) / 如果头结点大于第二个的 p2=p1-next; p1-next=p1-next-next; p2-next=p1; /头结点交换 stu=p2; p1=stu; while(p1-next-next) /中间的交换 p2=p1; p1=p1-next; if(p1-zp1-next-z) p2-next=p1-next; p1-next=p1-next-next; p2-next-next=p1; p1=p2-next; /交换 p1=stu; do p1-play(); p1=p1-next; while(p1); void cla:pAA()/按总分排序 student *p1,*p2; int n; p1=stu; n=1; while(p1-next) n+; p1=p1-next; cout共有n条信息.endl; int i; p1=stu; for(i=1;iAAp1-next-AA) / 如果头结点大于第二个的 p2=p1-next; p1-next=p1-next-next; p2-next=p1; /头结点交换 stu=p2; p1=stu; while(p1-next-next) /中间的交换 p2=p1; p1=p1-next; if(p1-AAp1-next-AA) p2-next=p1-next; p1-next=p1-next-next; p2-next-next=p1; p1=p2-next; /交换 p1=stu; do p1-play(); p1=p1-next; while(p1); void cla:staxis()/排序 system(cls); char c; cout请选择以何种方式排序:endl; cout1以学号排序endl; cout2以数学成绩排序endl; cout3以计算机成绩排序endl; cout4以英语成绩排序endl; cout5以总分排序endl; cout6返回endl; cout请选择(1-6)c; switch (c) case 1:pxh(); break; case 2:psx(); break; case 3:pyw(); break; case 4:pyy(); break; case 5:pAA(); break; case 6:return; void cla:ssave() /保存到文件 system(cls); char c; coutc; if(toupper(c)!=Y) return; ofstream tfile(date.txt,ios_base:binary); student *p=stu; while(p)/ 写入文件 tfilenametnumtxtytz; tfilenext; tfile.close(); cout保存完毕.next; delete p; p=stu; ifstream tfile(date.txt,ios_base:binary); string name1; long num1; int x1,y1,z1; tfilename1num1x1y1z1; while(tfile.good() /创建学生接点 student *s; s=stu; s=new student(name1,num1,x1,y1,z1); s-next=0; s-AA=x1+y1+z1; if(stu) /若已经存在结点 student *p2; p2=stu; while(p2-next) /查找尾结点 p2=p2-next; p2-next=s; /连接 else /若不存在结点(表空) stu=s; /连接 tfilename1num1x1y1z1; tfile.close(); coutn学生信息已经装入.n; void main() char c; cla a; do coutn 学 生 成 绩 管 理 系 统 n; cout*n; cout 作者:09软件+信息(2)班: n; cout 1增加学生 n; cout 2删除学生 n; cout 3修改学生 n; cout 4查询学生信息 n; cout 5排序 n; cout 6保存信息 n; cout 7读取信息 n; cout 8退出 n; cout*n; coutc; switch(c) case 1: a.sadd();break; case 2: a.sremove();break; case 3: a.samend();break; case 4: a.ssearch();break; case 5: a.staxis();break; case 6: a.ssave();break; case 7: a.sload();break; while(c!=8); 3.3系统界面系统主菜单列出了该程序的所有功能,学生个人的总分在输入创建链表是就计算好并储存好了,同时显示学生信息是就一起显示出来了,使用时该适当的使用第一个初始化链表的功能,否则可能出现意想不到的错误。初始界面图01:4调试与操作说明4.1调试过程增加学生修改信息查询方式排序方式保存信息4.2操作说明一个成绩管理系统如果不能进行文档的读出和写入的操作,功能再多,程序关闭后,所做的操作都将没有,这就失去了实际的意义。此系统当用户退出系统时,用户可以选择是否保存已做的修改。当用户任意选择一个操作时,系统将会提示。此外在输入成绩时,输入错误的数字系统可以提示错误,但是如果输入标点和字母时,系统将会出错,因此输入成绩时不可以输入字母和标点。此外,注意适当的使用链表初始化,防止出现意外错误,例如,一开始不初始化就显示学生信息,由于链表还未创建,会出现内存不能为read的错误。提示是否返回主菜单,如果不返回则自动提示退出系统,选择是的话返回主菜单。总结一开始知道课题后,以为很简单,但我想如果用数组实现的话,在内存中是以连续地址存放的,不方便操作,所以我选择了使用链表,它可以实现无序的在内存中存放,只要有一个头结点,就可以对整个链表进行相关的操作,在调式时遇到了很多问题,最多的是指针问题引起的内存不能为read,因此指针这一块知识还得好好的加强,当我将学生成绩管理系统的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论