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。
ii++)
{
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。
ii++)
{
for(k=i,j=i+1。
jj++)
if(data[k].mark_totk=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_totpos++。
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年
物理与电子信息学院课程设计评定意见
指导教师评语
主要内容包括:
设计报告内容的完整性和完成情况、报告格式的规范性、通过课程设计取得的收获等。
成绩:
签名:
年 月 日