C语言课程设计学生成绩管理系统分析方案.docx
- 文档编号:23146124
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:15
- 大小:121.48KB
C语言课程设计学生成绩管理系统分析方案.docx
《C语言课程设计学生成绩管理系统分析方案.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生成绩管理系统分析方案.docx(15页珍藏版)》请在冰豆网上搜索。
C语言课程设计学生成绩管理系统分析方案
《课程名称》
课程设计报告
题目
学生成绩管理系统
学号
姓名
年级专业
2009电子信息工程
同组人员
指导教师
完成日期
2010
年
06
月
30
日
安徽师范大学物理与电子信息学院
CollegeofPhysicsandElectronicInformation,AnhuiNormalUniversity
一、问题描述和基本要求
1、每条记录包括:
学号、姓名、专业和5门课程的分数;
2、能够实现添加、删除、修改功能;
3、能够计算某学生的总分和平均分;
4、能够照总分排序输出。
二、系统分析和设计
仔细阅读系统要求,首先将此系统化分为如下模块:
1、输入初始的学生信息:
可用函数input()来实现此操作;
2、输出学生的信息以及成绩:
可通过函数output()来实现,
3、排序模块:
可通过sort()来实现,通过比较总分的大小来排序;
4、插入模块:
可通过函数insert()来实现,其中通过学号的大小来比较,并且以此来排序;
5、删除模块:
可通过函数delete()来实现,其中通过输入学号来选择要删除的学生信息;
5、退出系统:
可通过一个函数exit()来实现,输入“0”即退出此程序。
三、程序流程图
四、程序清单
源程序:
#include
#include
#include
#defineMAXN35
#defineMAX_NAME128
typedefstructstudent/*定义学生信息*/
{
intno。
/*定义学号*/
charname[MAX_NAME]。
/*定义姓名*/
charfield[MAX_NAME]。
/*定义专业*/
doublesubject1。
/*定义五个科目*/
doublesubject2。
doublesubject3。
doublesubject4。
doublesubject5。
doublemark_ave。
/*定义平均分*/
doublemark_tot。
/*定义总分*/
}STUDENT。
/*以下为输入信息程序*/
voidinput(STUDENT*data,int*len)
{
intno。
putchar('\n')。
printf("%s\n","Pleaseenteranewrecord,ifneedtoexitthecurrentmenupleaseinput-1.")。
printf("%s","Form:
\nno")。
printf("%s","Namefieldsubject1subject2subject3subject4subject5\n")。
scanf("%d",&no)。
while(no!
=-1)
{
data[*len].no=no。
scanf("%s%s%lf%lf%lf%lf%lf",data[*len].name,data[*len].field,&data[*len].subject1,&data[*len].subject2,&data[*len].subject3,&data[*len].subject4,&data[*len].subject5)。
data[*len].mark_ave=(data[*len].subject1+data[*len].subject2+data[*len].subject3+data[*len].subject4+data[*len].subject5)/5.0。
data[*len].mark_tot=data[*len].subject1+data[*len].subject2+data[*len].subject3+data[*len].subject4+data[*len].subject5。
(*len)++。
/*指针加一*/
scanf("%d",&no)。
/*输入*/
}
}
/*以下为输出信息程序*/
voidoutput(STUDENT*data,intlen)
{
inti。
system("cls")。
/*定义系统菜单*/
printf("%5s","no")。
/*输出菜单*/
printf("%7s","name")。
printf("%7s","field")。
printf("%10s","subject1")。
printf("%10s","subject2")。
printf("%10s","subject3")。
printf("%10s","subject4")。
printf("%10s","subject5")。
printf("%12s","mark_ave")。
printf("%10s","mark_tot")。
putchar('\n')。
for(i=0。
i<80。
i++)
putchar('=')。
putchar('\n')。
for(i=0。
i i++) { printf("%5d",data[i].no)。 printf("%8s",data[i].name)。 printf("%8s",data[i].field)。 printf("%8.1lf",data[i].subject1)。 printf("%8.1lf",data[i].subject2)。 printf("%10.1lf",data[i].subject3)。 printf("%10.1lf",data[i].subject4)。 printf("%10.1lf",data[i].subject5)。 printf("%12.1lf",data[i].mark_ave)。 printf("%10.1lf",data[i].mark_tot)。 putchar('\n')。 } for(i=0。 i<80。 i++) putchar('=')。 putchar('\n')。 printf("PressEntertocontinue.")。 getchar()。 getchar()。 } /*以下为排序程序*/ voidsort(STUDENT*data,intlen) { inti,j,k。 STUDENTtemp。 for(i=0。 i i++) { for(k=i,j=i+1。 j j++) if(data[k].mark_tot k=j。 if(k! =i) { temp=data[i]。 data[i]=data[k]。 data[k]=temp。 } } } /*以下为添加程序*/ voidinsert(STUDENT*data,int*len) { intno,pos。 doublesubject1,subject2,subject3,subject4,subject5,mark_ave,mark_tot。 inti。 charname[MAX_NAME]。 charfield[MAX_NAME]。 lab: printf("%s\n","Enterthenewrecord,pleaseinputfromthecurrentmenu-1.")。 printf("%s","Form: \nno")。 printf("%s","Namefieldsubject1subject2subject3subject4subject5\n")。 scanf("%d",&no)。 if(no==-1)return。 data[*len].no=no。 scanf("%s%s%lf%lf%lf%lf%lf",name,field,&subject1,&subject2,&subject3,&subject4,&subject5)。 mark_ave=(subject1+subject2+subject3+subject4+subject5)/5.0。 mark_tot=subject1+subject2+subject3+subject4+subject5。 pos=0。 while((data[pos].mark_tot pos++。 for(i=*len-1。 i>=pos。 i--) data[i+1]=data[i]。 data[pos].no=no。 strcpy(data[pos].name,name)。 strcpy(data[pos].field,field)。 data[pos].subject1=subject1。 data[pos].subject2=subject2。 data[pos].subject3=subject3。 data[pos].subject4=subject4。 data[pos].subject5=subject5。 data[pos].mark_ave=mark_ave。 data[pos].mark_tot=mark_tot。 (*len)++。 gotolab。 } /*以下为删除程序*/ voiddelete_item(STUDENT*data,int*len) { intno,i,pos。 lab: pos=0。 printf("%s\n","Thestudentsneedtodeletetheinputofstudentid,pleaseinputfromthecurrentmenu-1.")。 scanf("%d",&no)。 if(no==-1) return。 while((data[pos].no! =no)&&(pos<*len)) pos=pos+1。 if(pos>=*len) { printf("%s\n","Didnotfindthestudentsneedtodelete")。 gotolab。 } else { for(i=pos+1。 i<*len。 i++) data[i-1]=data[i]。 *len=*len-1。 if(*len==0) { printf("%s\n","Norecords,pleasepressEntertoreturn.")。 getchar()。 getchar()。 return。 } gotolab。 } } /*以下为显示信息程序*/ voidpaint() { inti。 system("cls")。 printf("\n%49s\n","ScoreManageSystem\n")。 for(i=0。 i<80。 i++) putchar('=')。 putchar('\n')。 printf("1Inputdata2Outputdata\n")。 printf("3sort4Insert\n")。 printf("5delete0Quit\n")。 for(i=0。 i<=79。 i++) putchar('=')。 putchar('\n')。 printf("%s\n","Enternumfrom1to5: ")。 } /*以下为主程序*/ voidmain() { STUDENTdata[MAXN]。 intlen=0。 chara。 paint()。 scanf("%c",&a)。 while(a! ='0') { switch(a) { case'1': input(data,&len)。 break。 case'2': output(data,len)。 break。 case'3': sort(data,len)。 break。 case'4': insert(data,&len)。 break。 case'5': delete_item(data,&len)。 break。 default: if(a! ='\n')printf("%s\n","InputError! ")。 break。 } if(a! ='\n')paint()。 scanf("%c",&a)。 } } 五、测试数据 运行源程序,结果如下: 六、问题小结 在设计过程中,遇到的问题有: 1、如何排序,在排序方法的选择上出现问题,最终在查阅课本、相互比较之下得到了解决; 2、所学的函数实现不了系统要求的功能,通过查阅书籍、询问同学得到了解决,如使用了system("cls")来定义系统菜单等。 七、收获和体会 通过此次课程设计,巩固了对for循环、switch结构、函数调用、指针等已学过的重要知识点的掌握;了解并学习了system("cls"),goto语句,掌握了新知识;提高了分析解决问题的能力。 八、参考资料: 1)谭浩强,C程序设计教程,清华大学出版社,2007年 2)赵永哲,李雄飞,戴秀英编著,《C语言程序设计》,科学出版社,2003年 3)夏宽理,赵子正编著,《C语言程序设计》,中国铁道出版社,2006年 物理与电子信息学院课程设计评定意见 指导教师评语 主要内容包括: 设计报告内容的完整性和完成情况、报告格式的规范性、通过课程设计取得的收获等。 成绩: 签名: 年 月 日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 学生 成绩 管理 系统分析 方案