已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
西安郵電大學c语言课程设计报告题 目: 学生成绩管理系统院系名称: 计算机学院 专业名称: 计算机科学与技术班 级: 计科1102 学生姓名: 冯佳新学号(8位): 04111067指导教师: 李川设计起止时间:2012年6月6日2012年6月15日一. 设计目的1. 强化上机动手能力,在理论和实践的基础上进一步巩固c语言程序设计课程学习的内容,掌握工程化软件设计的基本方法2. 学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力3. 为后续各门计算机课程的学习打下坚实基础二. 设计内容1、密码登录;2、通过键盘输入学生信息,包括学生学号、姓名、成绩;3、将输入的信息保存到指定文件中;4、从文件中读取学生信息;5、显示全部学生信息;6、按学生总分进行降序排序;7、删除学生信息;8、查找学生信息,可以通过学号查找,也可以通过姓名查找;9、统计学生信息,统计出最高分和学生人数;10、退出系统;三概要设计1功能模块图;主程序输 入 学 生信 息显 示 学 生信 息查 找 学 生信 息修 改 学 生信 息密码登录删 除学 生信 息总 分排 序情 况统 计学 生信 息2各个模块详细的功能描述。1、密码登录:进入系统前需输入密码口令,此处的密码分为管理员登录密码“abcde”,学生登录密码“12345”;2、输入信息:输入学生信息,包括:学号、姓名、成绩;3、显示信息:显示输入的信息或者经过处理后的信息4、查找信息:查找学生信息,可以按学号查找,也可以按姓名查找;5、修改信息:修改学生的任何信息;6、删除信息:通过查找学生姓名删除该学生信息;7、排序信息:将输入的学生信息排序,按总分成绩降序排列;8、统计信息:统计出所有信息中的最高分成绩的学生的信息和学生人数。四详细设计1功能函数的调用关系图学生信息管理系统登录系统输入密码登录系统录入学生信息显示学生信息总分排序情况删除学生信息修改学生信息学生成绩统计查询学生信息按2键退出系统2各功能函数的数据流程图1、主函数模块登录(输入密码)判断密码显示主菜单选择要操作的模块调用相应模块返回主菜单退出选择项结束密码错误密码正确2、输入模块学生信息输入模块进入依次输入各项信息选择自符ch判断ch!=n& ch!=n返回2、输出与排序模块输出学生信息模块进入p=head输出对应学生信息p=p-nextp!=null结束总分排序情况进入冒泡法排序总成绩由大到小排序输出结束3、删除与修改信息模块删除学生信息模块进入输入学生的姓名从头指针依次查找p=p-next执行删除操作结束head=null该学生不存在修改学生信息模块进入输入学生姓名从头指针依次查找加结束判断strcmp(p-name.a)!=op=p-next修改该学生的信息该学生不存在是否4、统计信息模块学生成绩统计模块进入统计最高分p=headp!=null通过冒泡排序第一个学生的信息统计成功结束4、查找信息模块查找学生信息模块进入从主函数得到头指针按学号查找按姓名查找将学号存在变量b将姓名存在变量ap!=nullp=p-nextstrcmp(p-num.b)!=0strcmp(p-name.a)!=0是是找到该学生的信息输出信息结束3重点设计及编码此程序的重点是既能把学生信息保存到文件中,又能保存到磁盘中,方便实用与读取,代码如下:struct student *creat(struct student *p)/创建链表struct student *p1 = null;p1 = (struct student*)malloc(sizeof (struct student);p - next = p1;p1 - next = null;printf(请输入要添加的学生的信息n);printf(学号:); scanf(%s,p1 - num);printf(姓名: ); scanf(%s,p1 - name);printf(数学成绩:); scanf(%d,&p1 - scorem);printf(英语成绩:); scanf(%d,&p1 - scoree);printf(c成绩:); scanf(%d,&p1 - scorec);p1 - sum = 0;p1 - sum = p1 - scorem + p1 - scorec + p1 - scoree; printf(总分:%d,p1 - sum); return p1;void save1(struct student *p)/将链表从内存保存到文件中file *fp;if (fp = fopen(d:学生成绩管理系统.txt,ab+) = null)printf(创建失败!n);while(p != null)fwrite(p,sizeof(struct student),1,fp); p = p - next; fclose(fp);printf(保存成功!n);void save2(struct student *p)/将以变动的链表信息存入到文件中file *fp;if (fp = fopen(d:学生成绩管理系统.txt,wb) = null)printf(创建失败!n);while(p != null)fwrite(p,sizeof(struct student),1,fp); p = p - next; fclose(fp);struct student *read()/把文件中的数据读到链表中file *fp;struct student *head=null,*p1=null,*p2=null;if (fp=fopen (d:学生成绩管理系统.txt,rb+)=null)printf (读取时,文件打开失败!n);return null;head=p1=(struct student *)malloc (sizeof (struct student );while (fp != null) if (fread(p1,sizeof (struct student ),1,fp) != 1)break;p1 - next = (struct student *)malloc (sizeof (struct student );p2= p1; p1= p1 - next;p2-next = null;fclose (fp);return head;五测试数据及运行结果1 正常测试数据和运行结果1.按总分排序2.删除某个学生信息3. 查找学生信息2 异常测试数据及运行1. 删除信息出现异常2.修改学生信息出现异常六调试情况,设计技巧及体会1、对自己设计进行评价 1) 不够细心,开始的时候出现很多错误2) 没有写登录函数3) 写的过于简短,且大部分都是书上照抄的2 .调试上得到的体会:在最后的调试过程中,发现有时候系统报错,指出了错误所在的具体位置,可是检查的时候发现该位置并未出错,这样的错误首先要查找前后几行,如果还未检查出错误,那就很有可能在该函数的首部或是主函数的调用语句中出现错误。发现该部分并未出现语法错误,即编译不报错,程序运行后,有时候会出现意想不到的结果,会在想不到的地方跳出程序,甚至不知道程序的什么地方就跳出了,用在不同的地方加不必要的printf语句!以检查是否运行到printf语句。 3设计上得到的体会:在初步设计时要明确要使用的数据结构和类型,明确设计的基本思想,清楚所写程序的逻辑结构和执行顺序,在调试时才能在出现问题时及时的找到问题的所在.在完成了初步的设计并调试完成后,要进一步优化程序的结构,使程序更简洁,执行效率更高.总之,第一次完成比较正式的程序,在开始的时候遇到了不少问题,包括怎么排序,怎么添加,怎么查找,怎么删除等一系列问题,但我并没有慌张,而是由一个问题入手,最后将它们一一攻破,顺利而又艰难的完成了这次任务;通过这次实习,我的编程能力得到了很大的提高,算法思路也比以前清晰多了,基本上掌握了c语言的课程内容,虽然只有为期两周的实习,但是我的c语言还是得到了进一步的提高。不过要想使自己的水平提高,还有待练习。虽然实习结束了,但是以后在工作中可能会经常使用,这次的实习的确是一个很好的锻炼机会,它一定会使我受益终身的!七参考文献c语言程序设计 (第二版),数据结构(c语言) 清华大学出版社八附录:源代码(电子版)#include#include#includestruct studentchar num9;char name9;int scorem;int scoree;int scorec; int sum;struct student *next;struct student *creat(struct student *p)/创建链表struct student *p1 = null;p1 = (struct student*)malloc(sizeof (struct student);p - next = p1;p1 - next = null;printf(请输入要添加的学生的信息n);printf(学号:); scanf(%s,p1 - num);printf(姓名: ); scanf(%s,p1 - name);printf(数学成绩:); scanf(%d,&p1 - scorem);printf(英语成绩:); scanf(%d,&p1 - scoree);printf(c成绩:); scanf(%d,&p1 - scorec);p1 - sum = 0;p1 - sum = p1 - scorem + p1 - scorec + p1 - scoree; printf(总分:%d,p1 - sum); return p1;void save1(struct student *p)/将链表从内存保存到文件中file *fp;if (fp = fopen(d:学生成绩管理系统.txt,ab+) = null)printf(创建失败!n);while(p != null)fwrite(p,sizeof(struct student),1,fp); p = p - next; fclose(fp);printf(保存成功!n);void save2(struct student *p)/将以变动的链表信息存入到文件中file *fp;if (fp = fopen(d:学生成绩管理系统.txt,wb) = null)printf(创建失败!n);while(p != null)fwrite(p,sizeof(struct student),1,fp); p = p - next; fclose(fp);struct student *read()/把文件中的数据读到链表中file *fp;struct student *head=null,*p1=null,*p2=null;if (fp=fopen (d:学生成绩管理系统.txt,rb+)=null)printf (读取时,文件打开失败!n);return null;head=p1=(struct student *)malloc (sizeof (struct student );while (fp != null) if (fread(p1,sizeof (struct student ),1,fp) != 1)break;p1 - next = (struct student *)malloc (sizeof (struct student );p2= p1; p1= p1 - next;p2-next = null;fclose (fp);return head;struct student *input()/添加函数char ch;struct student *p = null,*head=null; head=p = (struct student*)malloc(sizeof(struct student);p- next = null;printf(请输入要添加的学生的信息n);printf(学号:); scanf(%s,p - num);printf(姓名: ); scanf(%s,p - name);printf(数学成绩:); scanf(%d,&p - scorem);printf(英语成绩:); scanf(%d,&p - scoree);printf(c成绩:); scanf(%d,&p - scorec);p - sum = 0;p - sum = p - scorem + p - scorec + p - scoree; printf(总分:%d,p - sum); for (;) printf (n是否继续输入学生信息?( y / n ):n);getchar( );ch = getchar ( );if (ch = y| ch = y) p = creat(p);else if(ch=n| ch=n) save1 (head);break;else printf (您的输入有误,请重新输入,);return p-next;struct student *output()/输出函数,查看全部学生信息struct student *p ;p = read(); if(read=null)exit(1);printf(n *student*n); printf( -n); printf( | 学号 | 姓名 | 数学 | 英语 | c语言 | 总分 |n); printf( -n);while (p != null)p - sum = 0; p - sum = p - scorem + p - scoree + p - scorec; printf( | %4s | %-4s | %3d | %3d | %3d | %3d |n,p-num, p-name,p-scorem,p-scoree,p-scorec,p-sum); printf( -n); p = p - next;return p;struct student *search()/查找函数int n;char a9,b9; struct student *p = null,*head = null; printf(请您选择要查找的方式:1 按姓名 2 按学号n); scanf(%d,&n); if(n=1)printf(请输入您要查找的学生的姓名:n);scanf(%s,a);p=head=read();while(p!=null)if(p=null)printf(对不起,没有您要找的人。n); if(strcmp(p - name,a)=0)printf(n *student*n); printf( -n); printf( | 学号 | 姓名 | 数学 | 英语 | c语言 | 总分 |n); printf( -n); printf( | %4s | %-4s | %3d | %3d | %3d | %3d |n,p-num, p-name,p-scorem,p-scoree,p-scorec,p-sum); printf( -n); break; p=p-next; if(n=2)printf(请输入您要查找的学生的学号:n); scanf(%s,b);p=head=read(); while(p!=null)if(p=null)printf(对不起,没有您要找的人。n); if(strcmp(p - num,b)=0)printf(n *student*n); printf( -n); printf( | 学号 | 姓名 | 数学 | 英语 | c语言 | 总分 |n); printf( -n); printf( | %4s | %-4s | %3d | %3d | %3d | %3d |n,p-num, p-name,p-scorem,p-scoree,p-scorec,p-sum); printf( -n); break; p=p-next;return head;struct student *dele()/删除函数 struct student *p1=null,*p2=null,*head=null;char a9;output();printf (请输入需要删除信息的人的姓名:n);scanf (%s,a);p1=head=read();if(head=null)printf(对不起,暂时没有信息,无法删除。n); while (head!=null)if(strcmp(a,head - name) != 0 & p1-next!=null )p2=head ; head= head-next ;if(head=null) break; if(strcmp(a,head - name) = 0 & p1=head)p1=head-next ;if(strcmp(a,head-name)=0)p2-next=head-next;save2(p1);printf(该学生的信息删除成功!);break;if(head=null)printf(对不起,没有该学生的信息。n);return head;struct student *change()/修改函数int a;char x9;struct student *p = null,*head = null,*q = null;output();p = head = read();printf(请输入要修改的人的姓名:n);scanf(%s,x); if(p = null)printf(没有这个人!n);exit(1);while (p != null)if (strcmp(p - name,x) = 0)q = p; break; p = p - next;if(p!=null)printf(请选择修改的内容:n); printf(1.姓名n); printf(2.学号n); printf(3.数学成绩n); printf(4.英语成绩n); printf(5.c成绩n); do scanf (%d,&a); if(a 6) printf (您输入的数字有误,请重新输入:n);while (a=6); switch (a) case 1 :printf(请输入更改后的姓名:n); scanf(%s,p - name); break; case 2 :printf(请输入更改后的学号:n); scanf(%s,p - num); break; case 3 :printf(请输入更改后的数学成绩:n);scanf(%d,&p - scorem);break; case 4 :printf(请输入更改后的英语成绩:n);scanf(%d,&p - scoree);break; case 5 :printf(请输入更改后的c成绩:n); scanf(%d,&p - scorec);break;p-sum =0;p-sum=p-scorem +p-scoree +p-scorec ;printf(更改后的总分:%d,p-sum); save2 (head); output();if(p=null)printf(对不起,没有这个人。n);return head;struct student *sortsum(struct student *head)/排序函数 struct student *p,*p1,*p2,*p3; struct student m, n; if (head = null) return null; m.next=head; p=&m; while (p-next!=null) p=p-next; p=p-next=&n; while (p!=m.next) p3=&m; p1=p3-next; p2=p1-next; while (p2!=p) if (p1 - sum) sum) ) p1-next=p2-next; p2-next=p1; p3-next=p2;p3=p2; p2=p1-next; else p3=p1; p1=p2; p2=p2-next; p=p1; while (p-next!=&n) p=p-next; p-next=null; return m.next;struct student *outputsortsum()/总分排序输出int i=0;struct student *head = null , *p = null;head = read(); p = sortsum(head);printf(n *student*n);printf( -n);printf( | 名次 | 学号 | 姓名 | 数学 | 英语 | c语言 | 总分 |n);printf( -n); while(p != null)i+; printf( | %3d | %4s | %-4s | %3d | %3d | %3d | %3d |n,i,p-num, p-name,p-scorem,p-scoree,p-scorec,p-sum);printf( -n);p=p-next;return head;struct student *statistic()/统计函数int m = 0;struct student *head=null;struct student *p,*q;p = head = read();while( p != null)m+; p = p - next; printf(总共有%d个学生信息.nn,m);q= sortsum(head);printf(分数最高的学生的信息:n); printf(n *student*n);printf( -n);printf( | 学号 | 姓名 | 数学 | 英语 | c语言 | 总分 |n);printf( -n);printf( | %4s | %-4s | %3d | %3d | %3d | %3d |n,q-num, q-name,q-scorem,q-scoree,q-scorec,q-sum);printf( -n);return head;void mima1 () while(1) int a=1; int i; char ch10; char num20=abcde; printf(进入管理员成绩管理系统之前请先输入密码n); printf(请输入您的密码 :n); for(i=0;i10;i+) chi=getch(); if(chi=13 ) break; putchar(*); chi=0; if(strcmp(num,ch)=0) a = 0; if(a=0) printf(n欢迎进入管理员管理系统 !n); getchar(); break; else printf(n这个密码是错误的! ); printf(n请输入正确的密码:); void mima2 () while(1) int a=1; int i; char ch10; char num20=12345; printf(进入学生成绩管理系统之前请先输入密码n); printf(请输入您的密码 :n); for(i=0;i10;i+) chi=getch(); if(chi=13 ) break; putchar(*); chi=0; if(strcmp(num,ch)=0) a = 0; if(a=0) printf(n欢迎进入学生成绩管理系统 !n); getchar(); break; else printf(n这个密码是错误的! ); printf(n请输入正确的密码:); void menu1()system(cls);printf(nn 欢迎进入管理员管理系统!nn); printf(n *主菜单*n);printf( * 1 添加学生成绩 *n); printf( * * 2 查找学生成绩 * *n); printf( * * * 3 删除指定学生 * * *n); printf( * * * 4 修改学生信息 * * *n); printf( * * * 5 总分排序信息 * * *n); printf( * * 6 查看全部信息 * *n); printf( * 7 统计学生人数 *n); printf( * 8 停止程序运行 *n); printf( *n); void menu2() system(cls); printf(nn 欢迎进入学生管理系统!nn); printf(n *
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业游学活动策划方案
- 2025年河南省许昌市禹州市辅警招聘考试题库附答案解析
- 2025福建三明学院招聘科研助理1人考试笔试备考试题及答案解析
- 2025年广西桂林市面向全国高校招聘急需紧缺专业人才149人笔试考试参考题库及答案解析
- 2025年衡阳市珠晖区辅警招聘考试题库附答案解析
- 2025年镇江市丹阳市辅警招聘考试题库附答案解析
- 江苏省南京市溧水区2025-2026学年八年级上学期期中语文试题(含答案)
- 2025年黑龙江省牡丹江市宁安市辅警招聘考试题库附答案解析
- 2025安徽合肥庐江县乡村振兴投资有限公司招聘工作人员(第二批)专业加试考试笔试备考题库及答案解析
- 2025年柳州市柳北区辅警招聘考试题库附答案解析
- 湖南财政经济学院《高等数学》2024-2025学年期末试卷(A卷)含答案
- 关于英语交际教学法课件
- 中医多囊卵巢综合症课件
- 眩晕综合症的护理查房
- 2025年兵团职工考试试题及答案大全
- 三务公开培训
- 企业维修售后管理制度
- 第5版pfmea考试试题及答案
- 水平三(五年级)体育《匀速耐久跑》教学设计及教案(附大单元教学设计)
- 现代汉语结构分析能力试题及答案
- 数字电路逻辑技术(第二版)王毓银课后习题答
评论
0/150
提交评论