学生信息管理.docx
- 文档编号:18227112
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:34
- 大小:60.51KB
学生信息管理.docx
《学生信息管理.docx》由会员分享,可在线阅读,更多相关《学生信息管理.docx(34页珍藏版)》请在冰豆网上搜索。
学生信息管理
设计题目:
学生信息管理系统
班级:
计算机1006
姓名:
周言
学号:
20101221450
完成日期:
2011-9-4
1.课程设计的目的和要求----------2
2.课程设计任务内容--------------3
3.详细设计说明------------------4
4.软件使用说明------------------6
5.课程设计心得与体会------------6
6.参考文献
7.附录:
部分程序清单(带有详细的注释)
一:
课程设计的目的和要求
1.学生信息初始化:
创建学生信息文件(包括学号,姓名,学院,班级,高数,英语,c语言成绩),然后计算总分和平均分,并将排序后的学生信息存入二进制文件中
2.学生信息操作:
(1)增加学生信息(增加后仍按学号排序,并保存)
(2)删除学生信息(输入要删除的学号,如果存在则删除信息;若不存在,则输出提示信息)
(3)修改学生信息(输入要修改的学号,如果存在,提示要修改的选项并保存;若无则输出提示信息)
3.学生信息查询:
(1)按学号查询学生信息(输入学号,输出学生信息)
(2)按姓名查询学生信息(包括精确查询和模糊查询)
(3)按学院查询学生信息(输入学院名称,输出学院学生信息)
(4)按班级查询学生信息(输入班级,输出全部学生信息)
4.按不同条件对学生信息进行查询:
(1)按总分对学生信息进行排序(由高到低),输出排序后的信息并存放到一个新的二进制文件中。
(2)按平均分统计各个分数段的学生人数(不及格,60-69,70-79,80-89,90-100)。
(3)分别找出3门课程成绩最高的学生,并输出他们的信息。
(4)分别统计出3门课程的不及格率,并输出。
二:
课程设计任务内容:
三:
详细设计说明:
1.数据结构设计:
根据需要,定义了一个结构体类型,即学生类型。
包括学生的学号,姓名,学院,班级和三门成绩。
定义如下:
structstudent//定义结构体类型
{
intnum。
//学号
charname[12]。
//姓名
charcollege[12]。
//学院
charcla[20]。
//班级
intscore[3]。
//三门课程成绩
inttotal。
//总分
floataverage。
//平均分
}stud[N]。
2.main函数的设计:
由于学生信息都保存在文件中,因此系统首先调用LoadStuds()函数返回学生人数,并将值返给学生人数,然后登陆学生登陆系统,调用StudentLogin函数实现学生登录,从而实现功能选择
3.学生信息处理:
对学生信息处理主要调用一下函数,
//学生信息管理模块的函数声明
voidInputOnestud(inti)。
//输入一个学生信息的函数
voidInputAllStuds(intsn)。
//输入全部学生信息的函数
voidSaveOnestud(inti)。
//保存一个学生的信息
voidsort(structstudentx[])。
//对学生学号排序的函数
intLoadStuds()。
//从文件载入全部学生信息的函数
voidSaveAllStuds(intsn)。
//保存全部学生信息的函数
intOriginalStud(void)。
//学生信息初始化的函数
voidModifyStud(intsn)。
//修改学生信息的函数
intAddStud(intsn)。
//添加学生信息的函数
intDelStud(intsn)。
//删除学生信息的函数
voidOutputAllStuds(intsn)。
//输出全部学生信息的函数
voidOutputOnestud(inti)。
//输出一个学生信息的函数
//学生信息查询模块的函数声明
voidSearchMenu(intsn)。
//学生信息查询函数
voidSearchSnum(intsn)。
//按学号查询函数
voidSearchSname(intsn)。
//按姓名查询函数
voidSearchScollege(intsn)。
//按学院查询函数
voidSearchScla(intsn)。
//按班级查询函数
//学生信息统计模块的函数声明
voidCountMenu(intsn)。
//学生信息统计函数
voidCountTotal(structstudentx[])。
//学生总分从高到低排序统计函数
voidCountAverage(structstudentx[],intsn)。
//按平均分统计各个阶段的学生人数的函数
voidCountTop(structstudentx[],intsn)。
//统计三门课程分数最高的学生的信息的函数
intSearch(structstudentx[],intn)。
//查找最高分的函数
voidCountNopass(structstudentx[],intsn)。
//统计三门课程的不及格率的函数
四:
软件使用说明:
该学生信息管理系统,通过学生用户进行操作,实现学生信息的初始化,并能计算总分和平均分;对学生信息进行删除、添加、删除操作;而且通过调用函数实现对学生信息通过学号、姓名、学院和班级的查询;并可以对学生信息进行统计:
其中包括按从高到低进行排序;统计三门课程的最高分学生的信息;三门课程的不及格率和统计各分数段的人数
五:
课程设计心得与体会:
通过这一星期的编程,发现了很多的问题:
其中就有对以前知识的模糊认识,没有弄清楚结构体的使用。
感觉学的东西很少,很零散,不知该怎么总和到一起,就要课程设计,是不是太难为我们了。
上午基本上是看课本,毕竟一个暑假都没有看课本了有些生疏。
后来对照课本后面的程序,自己慢慢地学着编译。
先把程序中的几个模块编写出来,觉得还是有很大收获的。
后来通过思考于对照课本,程序基本上算是编完了但一运行,那些错误我都不忍卒读啊!
!
后来在同学们得帮助下,我把错误一点点减少,并学到了很多以前我认为自己会的知识。
短短的一周课程设计结束了,但是这段时间里,我又学到了更多C知识,如:
数据结构体,函数调用时形参和实参的类型等等,总之这一周收获很大的。
六:
参考文献:
C语言课本及学生信息管理系统
七:
附录:
代码清单(带有详细解释)
//fdasfas.cpp:
Definestheentrypointfortheconsoleapplication.
//
#include
#include
#include
#defineN10
#definestud_LENsizeof(stud)//学生类型占用存储空间的大小
structstudent//定义结构体类型
{
intnum。
charname[12]。
charcollege[12]。
charcla[20]。
intscore[3]。
inttotal。
floataverage。
}stud[N]。
//用户登录模块的函数声明
voidStudentLogin(int*psn)。
//学生登录函数
//学生信息管理模块的函数声明
voidInputOnestud(inti)。
//输入一个学生信息的函数
voidInputAllStuds(intsn)。
//输入全部学生信息的函数
voidSaveOnestud(inti)。
//保存一个学生的信息
voidsort(structstudentx[])。
//对学生学号排序的函数
intLoadStuds()。
//从文件载入全部学生信息的函数
voidSaveAllStuds(intsn)。
//保存全部学生信息的函数
intOriginalStud(void)。
//学生信息初始化的函数
voidModifyStud(intsn)。
//修改学生信息的函数
intAddStud(intsn)。
//添加学生信息的函数
intDelStud(intsn)。
//删除学生信息的函数
voidOutputAllStuds(intsn)。
//输出全部学生信息的函数
voidOutputOnestud(inti)。
//输出一个学生信息的函数
//学生信息查询模块的函数声明
voidSearchMenu(intsn)。
//学生信息查询函数
voidSearchSnum(intsn)。
//按学号查询函数
voidSearchSname(intsn)。
//按姓名查询函数
voidSearchScollege(intsn)。
//按学院查询函数
voidSearchScla(intsn)。
//按班级查询函数
//学生信息统计模块的函数声明
voidCountMenu(intsn)。
//学生信息统计函数
voidCountTotal(structstudentx[])。
//学生总分从高到低排序统计函数
voidCountAverage(structstudentx[],intsn)。
//按平均分统计各个阶段的学生人数的函数
voidCountTop(structstudentx[],intsn)。
//统计三门课程分数最高的学生的信息的函数
intSearch(structstudentx[],intn)。
//查找最高分的函数
voidCountNopass(structstudentx[],intsn)。
//统计三门课程的不及格率的函数
voidmain(void)
{
intsn,select。
int*psn。
psn=&sn。
sn=LoadStuds()。
//调用LoadStuds(),返回值为学生人数,将其赋值给sn
while
(1)
{
printf("\n")。
printf("\t--------------------------------\n")。
printf("\t*学生信息管理系统*\n")。
printf("\t\n")。
printf("\t1.学生\n")。
printf("\t0.退出系统\n")。
printf("\t请选择用户:
")。
scanf("%d",&select)。
getchar()。
switch(select)
{
case1:
StudentLogin(&sn)。
break。
case0:
printf("\n谢谢使用!
再见\n")。
exit
(1)。
default:
printf("\n按键错误,请重新选择!
\n")。
}
}
}
//功能:
实现学生登录,显示学生用户菜单,进行功能选择
//参数:
psn为主函数中变量sn的地址
//返回:
无
//主要思路:
用if进行学号验证,用switch结构实现菜单功能选择
voidStudentLogin(int*psn)
{
intselect。
while
(1)
{
printf("\n")。
printf("同学,你好!
\n")。
printf("--------------------------------\n")。
printf("1.学生信息初始化5.学生信息查询\n")。
printf("2.修改学生信息6.学生统计\n")。
printf("3.添加学生信息7.输出全部学生信息\n")。
printf("4.删除学生信息\n")。
printf("0.返回主菜单\n")。
printf("\n请你选择需要的服务(0-7):
")。
scanf("%d",&select)。
getchar()。
switch(select)
{
case1:
*psn=OriginalStud()。
break。
case2:
ModifyStud(*psn)。
break。
case3:
*psn=AddStud(*psn)。
break。
case4:
*psn=DelStud(*psn)。
break。
case5:
SearchMenu(*psn)。
break。
case6:
CountMenu(*psn)。
break。
case7:
OutputAllStuds(*psn)。
break。
case0:
return。
default:
printf("\n按键错误,请重新选择!
\n")。
}
}
}
//功能:
实现学生信息的初始化
//参数:
无
//返回:
学生人数
//主要思路:
用for循环多次调用InputOnestud函数实现输入多个信息,并写入文件
intOriginalStud(void)
{
inti,j,sum,n。
charc='y'。
for(n=0。
c=='y'||c=='Y'。
n++)
{
printf("\n输入学生%d的信息:
\n",n+1)。
InputOnestud(n)。
printf("\n继续输入请按'y'。
停止请按'n':
")。
getchar()。
c=getchar()。
}
for(i=0。
i i++)//计算每个学生的总成绩和平均分 { sum=0。 for(j=0。 j<3。 j++) sum=sum+stud[i].score[j]。 stud[i].total=sum。 stud[i].average=(float)(sum/3.0)。 } sort(stud)。 SaveAllStuds(n)。 return(n)。 } //功能: 输入一个学生信息 //参数: i表示对第i个学生进行输入操作 //返回: 无 //主要思路: 用scanf函数输入学生的学号,姓名,学院,班级和高数英语c语言成绩 voidInputOnestud(inti) { printf("\n")。 intj。 printf("输入学号,姓名,学院,班级,高数,英语,C语言的成绩: \n")。 { scanf("%d%s%s%s",&stud[i].num,stud[i].name,stud[i].college,stud[i].cla)。 for(j=0。 j<3。 j++) scanf("%d",&stud[i].score[j])。 } } //功能: 按学号进行排序 voidsort(structstudentx[])//对学号进行排序 { inti,j。 structstudenttemp。 for(i=0。 i i++) { for(j=0。 j j++) { if(x[j].num>x[j+1].num) { temp=x[i]。 x[i]=x[i+1]。 x[i+1]=temp。 } } } } //功能: 将一个学生信息保存到文件“stud.dat"中 //参数: i表示将第i个学生信息保存到文件中 //返回: 无 //主要思路: 用fseek函数定位,再用fwrite函数写入第i个学生信息 voidSaveOnestud(inti) { FILE*fs。 if((fs=fopen("stud.dat","rb+"))==NULL)//以二进制读写方式打开文件 { printf("can'topenfilestud.dat\n")。 exit (1)。 } fseek(fs,stud_LEN*i,0)。 fwrite(&stud[i],stud_LEN,1,fs)。 fclose(fs)。 } //功能: 从文件"stud.dat"中载入全部学生信息 //参数: 无 //返回: 返回文件中学生的人数 //主要思路: 用while循环从文件中读取学生信息到数组student,同时统计学生人数 intLoadStuds(void) { FILE*fs。 intsn=0。 if((fs=fopen("stud.dat","rb+"))==NULL)//以二进制读,写方式打开文件 { printf("can'topenfilestud.dat\n")。 return(sn)。 } while(! feof(fs))//文件没有结束时进行读数据 if(fread(&stud[sn],stud_LEN,1,fs)) sn++。 //从文件中每读一个学生的信息,学生人数加1 fclose(fs)。 return(sn)。 //返回学生人数,即sn的值 } //功能: 将全部信息保存到文件“stud.dat"中 //参数: sn表示学生人数 //返回: 无 //主要思路: 用fwrite函数将数组student中的数据一次性写入文件 voidSaveAllStuds(intsn) { FILE*fs。 if((fs=fopen("stud.dat","wb"))==NULL)//以二进制写方式打开文件 { printf("can'topenfilestud.dat\n")。 exit (1)。 } fwrite(stud,stud_LEN,sn,fs)。 fclose(fs)。 } //功能: 增加学生信息 //参数: sn表示增加前的学生数量 //返回: 增加后的学生数量 //主要思路: 调用InputOnestud函数输入要添加的学生信息,再用fwrite将其写入文件 intAddStud(intsn) {ints。 printf("\n输入增加前的学生数量: \n")。 scanf("%d",&s)。 charc='y'。 FILE*fb。 if((fb=fopen("stud.dat","ab"))==NULL) { printf("can'topenfilestud.dat\n")。 exit (1)。 } while(c=='y'||c=='Y') { printf("\n请输入新增学生的信息: \n")。 InputOnestud(sn)。 //调用函数,输入第sn个学生的信息 fwrite(&stud[sn],stud_LEN,1,fb)。 //将第sn个学生的信息保存至文件 sn++。 //学生数量加1 sort(stud)。 SaveAllStuds(sn)。 printf("\n继续输入其它新学生的信息吗? (y/n): ")。 getchar()。 c=getchar()。 } printf("\n按任意键继续! \n")。 getchar()。 fclose(fb)。 return(s)。 //返回增加后学生的数量 } //功能: 删除学生信息 //参数: sn表示删除前的学生数量 //返回: 删除后的学生数量 //主要思路: 先输入要删除学生的学号,找到该学生后进行删除操作,再调用SaveAllStuds //函数将删除后的图书信息写入文件 intDelStud(intsn) { ints。 printf("\n输入删除前的学生数量: \n")。 scanf("%d",&s)。 inti,k=-1。 intnum,c1='y',c2。 if(sn==0) { printf("\n学生信息为空,无法执行操作! \n")。 return(s)。 } while(c1=='y'||c1=='Y') { c2='n'。 printf("\n请输入要删除的学生的学号: ")。 scanf("%d",&num)。 for(i=0。 i i++) if(stud[i].num==num) {k=i。 //找到要删除的学生,用k记录其下标 break。 } if(k<0) printf("\n输入的学号有误,请重新输入! \n")。 else { printf("\n确定要删除该学生的全部信息吗? (y/n): ")。 getchar()。 c2=getchar()。 if(c2=='y')//c2为'y',表示确定进行删除操作 { for(i=k。 i i++) stud[i]=stud[i+1]。 //从数组中删除第k个学生 sn--。 //学生数量减1 printf("\n成功删除! \n")。 } else//c2为'n',表示不进行删除操作 printf("\n取消删除! \n")。 printf("\n继续删除其他学生的信息吗? (y/n): ")。 getchar()。 c1=getchar()。 } } SaveAllStuds(sn)。 //保存删除后的全部学生信息 printf("\n按任意键继续! \n")。 getchar()。 return(s)。 //返回删除后的学生数量 } //功能: 修改学生信息 //参数: sn表示学生的数量 //返回: 无 //主要思路: 通过switch实现修改学生的任意信息项,并将修改后的信息写入文件 voidModifyStud(intsn) {ints。 printf("\n输入学生数量: \n")。 scanf("%d",&s)。 intselect,k=-1。 intnum,c1='y',c2。 if(sn==0) { printf("\n学生信息为空,无法执行操作! \n")。 return。 } while(c1=='y'||c1=='Y') { c2='y'。 printf("\n请输入要修改的学生的学号: ")。 scanf("%d",&num)。 for(inti=0。 i i++) if(stud[i].num==num) { k=i。 break。 } if(k<0)//k小于0,表示在数组st中没找到输入学号对应的学生 printf("\n输入的学号有误,请重新输入! \n")。 else//k大于等于0,表示找到该学生,应进行一下操作 { printf("\n显示此学生信息: \n")。 OutputOnestud(k)。 //显示
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 信息管理