计算机课程设计-学生成绩管理系统.doc_第1页
计算机课程设计-学生成绩管理系统.doc_第2页
计算机课程设计-学生成绩管理系统.doc_第3页
计算机课程设计-学生成绩管理系统.doc_第4页
计算机课程设计-学生成绩管理系统.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

通信工程学院课程设计报告2010.08.28一、实验题目:学生成绩管理系统二、系统功能: 1学生基本情况录入。2允许对已经录入的数据进行显示。3允许进行数据的插入。4删除基本数据的相关信息。5基于姓名的查询。如:姓张的所有同学。6基于各种基本数据的统计计算。如:统计每个学生各门功课的平均成绩,并按平均成绩从高到低的次序排名输出每个学生各门功课的综合成绩和平均成绩(名次、学号、姓名、平均成绩、各门功课的考试成绩)。列出90分以上(包括90)、80分以上(包括80)、70分以上(包括70)、60分以上(包括60)、不及格学生清单(学号、姓名、不及格的课程和成绩)。统计并输出各门功课的平均成绩和总平均成绩。三、系统功能模块结构图学生成绩管理系统统计表中数据查询表中数据删除表中数据插入数据到表中学生基本情况录入显示已经录入的数据图1: 学生成绩管理系统模块图四、数据结构设计及用法说明数据结构可参考下面定义typedef struct s1char no9;/*学号*/char name15; /*姓名*/char sex; /*性别*/int age; /*年龄*/int score4; /*成绩*/float sum; /*总分*/float average; /*平均分*/int order; /*排名*/struct s1 *next;student;与创建文本菜单相关的函数:window、textbackground、clrscr、textcolor、cprintf、bioskey、gotoxy、gettext、puttext、putch。putch(0xc9);/*输出左上角边框 */putch(0xcd);/*输出水平线*/putch(0xbb);/*输出右上角边框*/putch(0xba);/*输出左垂直线*/putch(0xc8);/*输出左上角边框*/putch(0xbc);/*输出右下角边框*/1查找相关函数、编写数据结构、算法、代码等,8学时;(周一)2完成菜单以及插入、删除记录过程;(周二)菜单的样板模式为: 1. enter list输入记录 2. delete a record from list从表中删除记录 3. print list 显示链表中所有记录 4. search record on name按照姓名查找记录 5. save the file将链表中记录保存到文件中 6. load the file从文件中读入记录 7. compute the score计算所有学生的总分和均分 8. insert record to list 插入记录到表中 9. quit退出3完成查找、显示记录。4完成保存数据到文件和从文件读数据的过程。 5完成学生的总分和均分的计算。五、程序结构开 始 调用menu函数输入menu select的值输入09中的一个数值,选择相应操作输入是否为0?结束 退出是判断键值,选择相应的操作否输入9 退出到主菜单图2:主程序流程图按键2输入要删除学生的学号或姓名是否含有此学生?删除信息重新输入!结 束是否图3 :输入学生信息流程图按键1判断为输入记录输入学生相关信息结 束info为空?否是图4:删除学生信息流程图按键3输入要显示学生的学号是否为空?显示该学生信息结 束是否图5:显示学生信息流程图按键4输入学生学号信息为空?显示学生信息结 束是否图6:查找学生信息流程图按键6打不开文件?否是申请空间结束 退出图7:加载学生信息流程图按键7信息为空?指针后移否是到表尾?计算总成绩和平均成绩是否显示输出结 束图8:计算总分及平均分流程图六、 各模块的功能及相关函数描述1数据结构链表是线形表的一种,线形表分为顺序存储结构和链式存储结构。线形表的顺序存储结构的特点是逻辑关系上相邻的两个元素物理位置上也相邻,因此可以随机存取表中任一元素。链式存储结构的特点是用一组任意的存储单元存储线形表的数据元素。链表的最大的优点是对表的添加、删除、查找、排序等操作比较方便,因此采用链表来存储学生相关信息。且对结点的定义如下:typedef struct s1char no9;/*学号*/char name15; /*姓名*/char sex; /*性别*/int age; /*年龄*/int score4; /*成绩*/float sum; /*总分*/float average; /*平均分*/int order; /*排名*/struct s1 *next;student;2、menu 主菜单与创建文本菜单相关的函数:window、textbackground、clrscr、textcolor、cprintf、bioskey、gotoxy、gettext、puttext、putch。putch(0xc9);/*输出左上角边框 */putch(0xcd);/*输出水平线*/putch(0xbb);/*输出右上角边框*/putch(0xba);/*输出左垂直线*/putch(0xc8);/*输出左上角边框*/putch(0xbc);/*输出右下角边框*/3、main()主函数主函数采用模块化设计。首先在主程序中打印欢迎界面,声明一些必要变量,作一无限循环程序,循环体为一开关语句,该语句设置一个断点,其条件值是通过调用主菜单函数得到的返回值,根据该值,调用相应的功能函数,同时设置一个断点,当返回值为一定条件时结束程序4、输入记录模块主要完成将数据存入单链表中的工作,可以从键盘逐个输入学生记录。学生记录由学生的基本信息和成绩信息字段构成。当从数据文件中读入记录时,他就是在以记录为单位存储的文件中,将记录逐条复制到单链表中。5、查询记录模块此模块主要完成在单链表中查找满足相关条件的学生记录,用户可以按照学生的学号和姓名进行查找,若找到该学生的记录,则返回指向该学生的指针。否则,返回一个值为null的空指针。6、更新记录模块此模块主要完成对学生的记录维护包括;对记录的修改、删除、插入等操作。一般来说,系统进行这些操作之后,会将修改后的数据存下来。7、统计记录模块 统计记录模块主要完成对学生各门功课总分及平均分的统计。8、输出记录模块 此模块主要完成对学生记录的存储和将单链表中的学生记录信息以表格的形式在屏幕上打印出来。9、load()从文件中加载记录按照文件读写要求,先定义一个指向文件的指针,输入要读入数据的磁盘文件名,然后确定文件的打开方式。如果文件打不开,则退出函数,否则选择一种读文件方式,从文件头开始,将记录读入内存,直到文件尾。文件打开方式和读入方式的确定要依据输出文件的打开方式和写入方式,以名数据读入错误。如果输出文件是二进制文件,块写操作,读入也应设置为二进制打开方式,块读取方式。每读入一条记录,都要做好指针链接关系,本函数将新结点链接到当前链表的尾部,链表的顺序和文件保存的顺序一10、delete()删除结点删除指定学号的学生记录。输入要删除的结点的学号,根据学号顺序查找结点,如果没找到,则输出没有找到的信息;否则显示找到的结点信息。如果删除的是头结点,则修改头指针,将该结点的前趋指针指向其后继结点,然后释放该结。11、insert()插入结点在指定结点前面插入新结点,申请空间得到指针info,输入新结点信息,存放info中,设链表头指针为h,p为指定结点的指针,q为p的前趋指针。从头结点开始循环移动指针p查找指定结点12、print()显示所有记录采用顺序访问的方法显示和查找记录,定义一个指向结点的临时变量p,初值为单链表的头指针,输出指针所记录的数据后,将指针后移一个记录,直到p指针值为空,则所有记录输出完毕。13、search()查找结点按照姓、姓名、或者姓名的前几个字母来查找记录。从头结点开始顺序查找,当输入一个关键字符串后,用strlen()函数得到该串的长度len,在表中取学生姓名的前len个字母与所输入的字符串相比较,没有相同记录显示没有,遇到第一个匹配的记录则显示此记录,继续查找链表,仍有相同记录则继续显示,直到尾结点结束。七、 实验结果(1) 开始界面:(2) 输入界面:(3) 显示界面:(4) 求平均分界面:(5) 查找界面:八、 体会本次课程设计中,我在前两天熟复习了上学期学过的c语言,使用结构化分析方法对课题进行分析,将系统分为几大模块,针对各个模块进行编程,写代码。期间,主要参考c语言课程设计案例精编清华大学出版社。实验的部分源程序都来源于此,其他程序由自己独立设计完成。编程期间,遇到了不少麻烦,最终也不能完全的实现老师所要求的全部功能,目前该程序可以完成对信息的输入输出,修改删除及成绩总计的求平均分等。在使用turbo c 时 ,总会有改存储路径的麻烦,最好的办法就是将软件装到e盘,其中由于打字不认真造成的错误在所难免,而一些错误却会使整个程序崩溃:无论如何修改也不能运行程序。经过两天的复习及编程,到周三的时候已经可以实现主菜单的显示,以及输入学生信息,并能显示记录。周四的时候可以实现对学生信息的显示查找,并努力实现对数据的保存及读取数据。直到最后对成绩单的统计和求平均值时,我总结了编程过程中存在的主要问题:首先,对一些的基础知识运用不熟练,主要是关于文件、指针、链表等的概念、初始化、赋值的基础知识。第二,对系统整体规划不清楚,模块之间联系考虑不周全。第三,个别功能不能实现,如成绩排序,备份,追加。总之,通过本次的课程设计,我了解了有关程序设计的基本流程及基本思路,对以后的编程有很大的帮助,尽管自己独立完成这项设计可能性很小,但在指导书的帮助下,我还是比较系统的了解到整个程序设计、运行的全过程。尽管自己的编程能力还很有限,但我也希望能常常有这样的锻炼机会。九、附录:源程序#include stdio.h#include stdlib.h#include ctype.h#include alloc.h#include string.h#include conio.h#include mem.h#define n 4typedef struct z1 char no9; char name15; int scoren; char sex2; int age; float sum; float average; int order; struct z1 *next; student;student *init();student *create();student *delete(student *h);void print(student *h);void search(student *h);void save(student *h);student *load();void computer(student *h);student *insert(student *h);void grade();void copy();void append();student *sort(student *h);int menu_select();int submenu();void grade00(student *h);main() int i; student *head;head=init(); clrscr(); printf(nn); for(;) switch(menu_select() case 1:head=create();break; case 2:head=delete(head);break; case 3:print(head);break; case 4:search(head);break; case 5:save(head);break; case 6 :head=load(); break; case 7:computer(head);break; case 8:head=insert(head); break; case 9:exit(0); menu_select()char *menu=*menu*, 1. enter list, 2. delete a record from list, 3. print list, 4. search record on list , 5. save the file , 6. load the file, 7. compue the file, 8. insert record to list, 9. quit、 ;、 char s3; int c,i; gotoxy(1,25);、 getch(); clrscr(); gotoxy(1,1); textcolor(yellow); textbackground(blue); gotoxy(19,2); putch(0xc9); for(i=1;i44;i+) putch(0xcd); putch(0xbb); for(i=3;i20;i+) 、gotoxy(19,i);putch(0xba); gotoxy(63,i);putch(0xba); /*输出右垂直线*/ gotoxy(19,20);putch(0xc8); for(i=1;i44;i+) putch(0xcd); putch(0xbc); window(20,3,62,19); clrscr(); /*清屏*/ for(i=0;i15;i+) 、 gotoxy(10,i+1); cprintf(%s,menui);、 textbackground(black); window(1,1,80,25); gotoxy(10,21); do、printf(ntt enter your choice(09) to continue:); scanf(%s,s); c=atoi(s); while(c13); /*选择项不在012之间重输*/ return c; 、student *init()return null;student *create()int i; int s; student *h=null,*info; clrscr(); for(;) info=(student *)malloc(sizeof(student); if(!info) printf(oout of memory); return null; inputs(nnenter the num. as 52081107. n type 0 to end enter:,info-no,9); if(info-no0=0) break; inputs(enter name:,info-name,15); inputs(enter the sex m(ale) or f(emale):,info-sex,2); do printf(enter the age of the student:); scanf(%d,&info-age); if(info-age30|info-ageageage30); printf(nnplease input %d scoresn,n); printf(the order is:n); printf(score1.englishnscore2.mathsn); printf(score3.c languagenscore4.philosophyn); s=0; for(i=0;iscorei); if(info-scorei100|info-scoreiscorei100|info-scoreiscorei; info-sum=s; info-average=(float)s/n; /*求出平均值*/ info-order=0; info-next=h; h=info; return(h); /inputs(char *prompt, char *s, int count)char p255; doprintf(prompt); /*显示提示信息*/ scanf(%s,p); /*输入字符串*/ if(strlen(p)count)printf(n too long! n); while(strlen(p)count); strcpy(s,p); void print(student *h) int i=0; student *p; clrscr(); p=h; printf(nnn*student*n); printf(|rec| no | name |sex|age|sc1|sc2|sc3|sc4| sum | ave | n); printf(|-|-|-|-|-|-|-|-|-|-|-| n); while(p!=null) i+; printf(|%-3d|%-10s|%-15s| %1s |%3d|%3d|%3d|%3d|%3d| %4.2f | %4.2f | %3d |n, i, p-no,p-name,p-sex,p-age,p-score0,p-score1,p-score2,p-score3,p-sum,p-average,p-order); p=p-next; printf(*end*n);student *delete(student *h)student *p,*q; char s9; clrscr(); printf(please enter the no. that you want to delete:n); scanf(%s,s); q=p=h; while(strcmp(p-no,s)&p!=null) q=p; p=p-next; if(p=null) printf(nlist no. %s studentn,s); else printf(nnn*student*n); printf(| no | name |sex|age|sc1|sc2|sc3|sc4| sum | ave | n); printf(|-|-|-|-|-|-|-|-|-|-| n); printf(|%-10s|%-15s| %1s |%3d|%3d|%3d|%3d|%3d| %4.2f | %4.2f | %3d |n, p-no,p-name,p-sex,p-age,p-score0,p-score1,p-score2,p-score3,p-sum,p-average,p-order); printf( *end*n); getch(); if(p=h) h=p-next; else q-next=p-next; free(p); printf(n *have deleted no %s student*n,s); printf(*dont forget to save!*n); return(h); /*返回头指针*/void search(student *h)student *p; char s15; int len; clrscr(); printf(nnnplease enter name for searchingn); scanf(%s,s); len=strlen(s); p=h; /*将头指针赋给p*/ if(p=null) /*如果指针为空*/ printf(nlist does not exist!n); while(p!=null) if(strncmp(p-name,s,len) p=p-next; else printf(n| no | name |sex|age|sc1|sc2|sc3|sc4| sum | ave | n);printf(|-|-|-|-|-|-|-|-|-|-| n); printf(|%-10s|%-15s| %s |%3d|%3d|%3d|%3d|%3d| %4.2f | %4.2f | %3d |n, p-no,p-name,p-sex,p-age,p-score0,p-score1,p-score2,p-score3,p-sum,p-average,p-order); p=p-next; getchar();student *insert(student *h)student *p,*q,*info; char s9; int s1,i; printf(nnnplease enter location before the no.n); scanf(%s,s); /*输入插入点学号*/ printf(nplease new recordn); info=(student *)malloc(sizeof(student); /*申请空间*/ if(!info) printf(nout of memory); return null; /*返回空指针*/ inputs(enter the no.nas 20032300:,info-no,9); inputs(enter the name:,info-name,15); /*输入姓名*/ inputs(enter the sex m(ale) or f(emale):,info-sex,2); doprintf(enter the age of the student:); scanf(%d,&info-age); if(info-age30|info-ageageage30); printf(nnplease input %d scoresn,n); printf(the order is:n); printf(score1.foreign languagenscore2.high level mathsn); printf(score3.c languagenscore4.philosophyn); s1=0; for(i=0;iscorei); if(info-scorei100|info-scoreiscorei100|info-scoreiscorei; /*计算总分*/ info-sum=s1; / info-average=(float)s1/n; /*计算均分*/ info-order=0; / info-next=null; p=h; q=h; while(strcmp(p-no,s)&p!=null) q=p; p=p-next; / if(p=null) if(p=h) h=info; else q-next=info; else if(p=h) info-next=p; h=info; else info-next=p; q-next=info; printf(n *have inserted %s student*n,info-name); printf(*dont forget to save*n); /*提示存盘*/ return(h); void save(student *h) file *fp; student *p; char outfile10;名 printf(enter outfile name,for example c:filename.txt:n); scanf(%s,outfile); if(fp=fopen(outfile,wb)=null) printf(can not open filen); exit(1); printf(nsaving file.n); p=h; while(p!=null) fwrite(p,sizeof(student),1,fp);/*写入一条记录*/ p=p-next; /*指针后移*/ fclose(fp); /*关闭文件*/ printf(*saved successful!*n); student *load() student *p,*q,*h=null; file *fp; char infile10; printf(enter infile name,for example c:filename.txt:n); scanf(%s,infile); /*输入文件名*/ if(fp=fopen(infile,rb)=null) printf(can not open filen); exit(1); printf(n *loading file!*n); p=(student *)malloc(sizeof(student); if(!p) printf(out of memory!n); return h; h=p; while(!feof(fp) if(1!=fread(p,sizeof(student),1,fp) break; p-next=(student *)malloc(sizeof(student); if(!p-next) printf(out of memory!n); return h; q=p; p=p-next; q-next=null; fclose(fp); printf(*you have read data from file!*n); return h; void copy() char outfile10,infile10; file *sfp,*tfp; /*源和目标文件指针*/ student *p=null; /*移动指针*/ clrscr(); /*清屏*/ printf(enter infile name,for example c:filename1.txt:n); scanf(%s,infile); /*输入源文件名*/ if(sfp=fopen(infile,rb)=null) /*二进制读方式打开源文件*/ printf(can not open input filen); exit(0); printf(enter outfile name,for example c:filename2.txt:n); /*提示输入目标文件名*/ scanf(%s,outfile); /*输入目标文件名*/ if(tfp=fopen(outfile,wb)=null) /*二进制写方式打开目标文件*/ printf(can not open output file n); exit(0); while(!feof(sfp) /*读文件直到文件尾*/ if(1!=fread(p,sizeof(student),1,sfp) break; /*块读*/ fwrite(p,sizeof(student),1,tfp); /*块写*/ fclose(sfp); /*关闭源文件*/ fclose(tfp); /*关闭目标文件*/ printf(*you have backup file!*n); /*显示成功拷贝*/student *sort(student *h) int i=0; h1=h-next; h-next=null; /* while(h1!=null) t=h1; h1=h1-next; p=h; q=h; / while(t-averageaverage&p!=null) q=p; p=p-next; if(p=q) /*p=q, t-next=p; h=t; else t-next=p; q-next=t; p=h; while(p!=null) i+; / p-order=i; p=p-next; printf(*sort sucess!*n); return h; void computer(student *h)student *p; int i=0; long s1=0; long s2=0; long s3=0; long s4=0; long sall=0; float ave1=0; float ave2=0; float ave3=0; float ave4=0; float aall=0; p=h; while(p!=null) s1+=p-score0; s2+=p-score1; s3+=p-score2; s4+=p-score3; sall+=p-sum; i+; p=p-next; ave1=(float)s1/i; ave2=(float)s2/i; ave3=(float)s3/i; ave4=(float)s4/i; aall=(float)sall/i; clrscr(); printf(nnn *all students average score is*nnnnn); printf(| type | sc1 | sc2 | sc3 | sc4 | all |n); printf(|-|-|-|-|-|-|n); printf(| aver | %3.2f | %3.2f | %3.2f | %3.2f | %5.2f |n,ave1,ave2,ave3,ave4,aall);void grade90(student *h) /*大于90分的记录*/student *p; int i; p=h; clrscr(); while(p!=null) for(i=0;iscorei=90) prin

温馨提示

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

评论

0/150

提交评论