学生成绩管理系统计算机课程设计.docx
- 文档编号:29972169
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:33
- 大小:355.15KB
学生成绩管理系统计算机课程设计.docx
《学生成绩管理系统计算机课程设计.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统计算机课程设计.docx(33页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统计算机课程设计
通信工程学院课程设计报告
2010.08.28
一、实验题目:
学生成绩管理系统
二、系统功能:
1.学生基本情况录入。
2•允许对已经录入的数据进行显示。
3.允许进行数据的插入。
4.删除基本数据的相关信息。
5.基于姓名的查询。
如:
姓张的所有同学。
6.基于各种基本数据的统计计算。
如:
1统计每个学生各门功课的平均成绩,并按平均成绩从高到低的次序排名输出每个学生各门功课的综合成绩和平均成绩(名次、学号、姓名、平均成绩、各门功课的考试成绩)。
2列出90分以上(包括90)、80分以上(包括80)、70分以上(包括70)、60分以上(包括60)、不及格学生清单(学号、姓名、不及格的课程和成绩)。
3统计并输出各门功课的平均成绩和总平均成绩。
三、系统功能模块结构图
学生成绩管理系统
r
V
1
F
1-
学生基本情况录入
显示已经录入的数据
插入数据到表中
删除表中数据
查询表中数据
统计表中数据
图1:
学生成绩管理系统模块图
四、数据结构设计及用法说明
数据结构可参考下面定义
typedefstructS1
{
charno[9];/*学号*/charname[15];/*姓名*/charsex;/*性别*/intage;/*年龄*/intscore[4];/*成绩*/floatsum;/*总分*/floataverage;/*平均分*/intorder;/*排名*/structS1*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.完成菜单以及插入、删除记录过程;
周二)
3.完成查找、显示记录
4•完成保存数据到文件和从文件读数据的过程。
5•完成学生的总分和均分的计算。
五、程序结构
图2:
主程序流程图
图3:
输入学生信息流程图
图4:
删除学生信息流程图
按键3
图5:
显示学生信息流程图
图6:
查找学生信息流程图
图7:
加载学生信息流程图
图8计算总分及平均分流程图
六、各模块的功能及相关函数描述
1.数据结构链表是线形表的一种,线形表分为顺序存储结构和链式存储结构。
线形表的顺序存储结构的特点是逻辑关系上相邻的两个元素物理位置上也相邻,因此可以随机存取表中任一元素。
链式存储结构的特点是用一组任意的存储单元存储线形表的数据元素。
链表的最大的优点是对表的添加、删除、查找、排序等操作比较方便,因此采用链表来存储学生相关信息。
且对结点的定义如下:
typedefstructS1{
charno[9];/*学号*/
charname[15];/*姓名*/
charsex;/*性别*/
intage;/*年龄*/
intscore[4];/*成绩*/
floatsum;/*总分*/
floataverage;/*平均分*/
intorder;/*排名*/
structS1*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)开始界面:
[Type0toEndEnter!
:
1
Entername:
xyl
EnterthesexM(ale)orF(enale):
n
Entertheageofthestudent:
21
Pleaseinput4scores
Theorderis:
(4)求平均分界面:
****AI1
studentsr
average
scoreis****
1typei
1--1
scl!
1
sc2
Isc3{
1______II__
sc4
iall3
1-___1
11
iaver|
57,00!
78,67
180.33I
38.67
304,67「
(5)查找界面:
Pleaseenternameforsearching紗1
Ho|
.,.i
nane|sexidgeiscl!
sc2|sc3!
sd|
1sun
.i
1眦|
.i
i
ii
Ixyl121!
166|99|
I88|77
I330.9B
I8150|
八、体会
本次课程设计中,我在前两天熟复习了上学期学过的C语言,使用结构化分析方法对课题进行分析,将系统分为几大模块,
针对各个模块进行编程,写代码。
期间,主要参考《C语言课程设计案例精编》清华大学出版社。
实验的部分源程序都来源于此,其他程序由自己独立设计完成。
编程期间,遇到了不少麻烦,最终也不能完全的实现老师所要求的全部功能,目前该程序可以完成对信息的输入输出,修改删除及成绩总计的求平均分等。
在使用TurboC时,总会有改存储路径的麻烦,最好的办法就是将软件装到E盘,其中由于打字不认真造成的错误在所难免,而一些错误却会使整个程序崩溃:
无论如何修改也不能运行程序。
经过两天的复习及编程,到周三的时候已经可以实现主菜单的显示,以及输入学生信息,并能显示记录。
周四的时候可以实现对学生信息的显示查找,并努力实现对数据的保存及读取数据。
直到最后对成绩单的统计和求平均值时,我总结了编程过程中存在的主要问题:
首先,对一些的基础知识运用不熟练,主要是关于文件、指针、链表等的概念、初始化、赋值的基础知识。
第二,对系统整体规划不清楚,模块之间联系考虑不周全。
第三,个别功能不能实现,如成绩排序,备份,追加。
总之,通过本次的课程设计,我了解了有关程序设计的基本流程及基本思路,对以后的编程有很大的帮助,尽管自己独立完成这项设计可能性很小,但在指导书的帮助下,我还是比较系统的了解到整个程序设计、运行的全过程。
尽管自己的编程能力还很有限,但我也希望能常常有这样的锻炼机会。
九、附录:
源程序
#include"stdio.h"#include"stdlib.h"#include"ctype.h"#include"alloc.h"#include"string.h"#include"conio.h"#include"mem.h"#defineN4typedefstructz1{charno[9];
charname[15];intscore[N];
charsex[2];intage;
floatsum;
floataverage;intorder;
structz1*next;
}STUDENT;
STUDENT*init();
STUDENT*create();
STUDENT*delete(STUDENT*h);voidprint(STUDENT*h);
voidsearch(STUDENT*h);
voidsave(STUDENT*h);
STUDENT*load();
voidcomputer(STUDENT*h);
STUDENT*insert(STUDENT*h);
voidgrade();
voidcopy();
voidappend();
STUDENT*sort(STUDENT*h);
intmenu_select();
intsubmenu();
voidgrade00(STUDENT*h);
main()
{inti;
STUDENT*head;head=init();clrscr();printf("\n\n");for(;;)
{switch(menu_select())
{case1:
head=create();break;
case2:
head=delete(head);break;
case3:
print(head);break;
case4:
search(head);break;
case5:
save(head);break;
case6:
head=load();break;
case7:
computer(head);break;
case8:
head=insert(head);break;
case9:
exit(0);
}
}
}
*************"
menu_select()
{char*menu[]={"*************MENU
"1.Enterlist",
"2.Deletearecordfromlist","3.printlist",
"4.searchrecordonlist""5.savethefile",
"6.Loadthefile",
"7.compuethefile",
"8.insertrecordtolist",
"9.quit"
、};
、chars[3];
intc,i;gotoxy(1,25);getch();
clrscr();
gotoxy(1,1);textcolor(YELLOW);textbackground(BLUE);
gotoxy(19,2);
putch(0xc9);
for(i=1;i<44;i++)
putch(0xcd);
putch(0xbb);
for(i=3;i<20;i++)
{、gotoxy(19,i);putch(0xba);gotoxy(63,i);putch(0xba);
}/*输出右垂直线*/gotoxy(19,20);putch(0xc8);for(i=1;i<44;i++)putch(0xcd);
putch(0xbc);
window(20,3,62,19);
clrscr();/*清屏*/
for(i=0;i<15;i++)
{、gotoxy(10,i+1);
cprintf("%s",menu[i]);、}textbackground(BLACK);window(1,1,80,25);
gotoxy(10,21);
do{、printf("\n\t\tEnteryourchoice(0~9)tocontinue:
");
scanf("%s",s);
c=atoi(s);
}while(c<0||c>13);/*选择项不在0~12之间重输*/
returnc;、
}
STUDENT*init()
{returnNULL;
}
STUDENT*create()
{inti;ints;
STUDENT*h=NULL,*info;clrscr();
for(;;)
{info=(STUDENT*)malloc(sizeof(STUDENT));if(!
info)
{printf("\oOutofmemory");returnNULL;}
inputs("\n\nEntertheNum.as52081107.\n[Type0toEndEnter]:
",info->no,9);if(info->no[0]=='0')break;inputs("Entername:
",info->name,15);
inputs("EnterthesexM(ale)orF(emale):
",info->sex,2);
do{printf("Entertheageofthestudent:
");
scanf("%d",&info->age);
if(info->age>30||info->age<0)
printf("\x07AGEERROR!
!
TYPEAGAIN!
\n");}while(info->age<0||info->age>30);
printf("\n\nPleaseinput%dscores\n",N);printf("Theorderis:
\n");printf("score1English\nscore2MATHS\n");
printf("score3CLANGUAGE\nscore4PHILOSOPHY\n");
s=0;for(i=0;i do{printf("score%d: ",i+1);scanf("%d",&info->score[i]);if(info->score[i]>100||info->score[i]<0)/*确保成绩在0~100之间*/printf("\x07DATAERROR! ! TYPE AGAIN! \n");}while(info->score[i]>100||info->score[i]<0); s=s+info->score[i];info->sum=s;info->order=0;h=info;}return(h);/ }inputs(char*prompt,char*s,intcount){charp[255]; }while(strlen(p)>count); do{printf(prompt);/*显示提示信息*/scanf("%s",p);/*输入字符串*/if(strlen(p)>count)printf("\ntoolong! \n"); strcpy(s,p);}voidprint(STUDENT*h){inti=0; STUDENT*p;p=h; *********\n"); getch();if(p==h)h=p->next;elseq->next=p->next;free(p);printf("\n*****HavedeletedNo%sstudent*****\n",s); printf("*********Don'tforgettosave! *********\n");}return(h);/*返回头指针*/ } voidsearch(STUDENT*h){STUDENT*p;chars[15];intlen; clrscr();printf("\n\n\nPleaseenternameforsearching\n"); scanf("%s",s);len=strlen(s); p=h;/*将头指针赋给p*/if(p==NULL)/*如果指针为空*/ printf("\nListdoesnotexist! \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->score[0],p->score[1],p->score[2],p->score[3],p->sum,p->average,p->order);p=p->next; } }getchar(); } STUDENT*insert(STUDENT*h){STUDENT*p,*q,*info;chars[9]; ints1,i;printf("\n\n\nPleaseenterlocationbeforetheNo.\n"); scanf("%s",s);/*输入插入点学号*/printf("\nPleasenewrecord\n"); info=(STUDENT*)malloc(sizeof(STUDENT));/*申请空间*/ if(! info) { printf("\nOutofmemory"); returnNULL;/*返回空指针*/} inputs("EntertheNo.\n[As20032300]: ",info->no,9);inputs("Enterthename: ",info->name,15);/*输入姓名*/inputs("EnterthesexM(ale)orF(emale): ",info->sex,2); do{printf("Entertheageofthestudent: ");scanf("%d",&info->age); if(info->age>30||info->age<0)printf("\x07AGEERROR! ! TYPEAGAIN! \n"); }while(info->age<0||info->age>30); printf("\n\nPleaseinput%dscores\n",N);printf("Theorderis: \n"); printf("score1FOREIGNLANGUAGE\nscore2HIGHLEVEL MATHS\n"); printf("score3CLANGUAGE\nscore4PHILOSOPHY\n"); s1=0;for(i=0;i do{ printf("score%d: ",i+1);scanf("%d",&info->score[i]);if(info->score[i]>100||info->score[i]<0) printf("\x07Errordata! ! Repeatinput! \n");}while(info->score[i]>100||info->score[i]<0);s1=s1+info->score[i];/*计算总分*/ } 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 计算机 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)