学生证管理系统.docx
《学生证管理系统.docx》由会员分享,可在线阅读,更多相关《学生证管理系统.docx(24页珍藏版)》请在冰点文库上搜索。
学生证管理系统
一、课程设计的目的
提高程序设计能力,检验课堂教学内容,掌程序设计的基本方法和调试技能。
二、课程设计报告正文
题目
该系统应该具有下列功能:
(1)录入某位学生的学生证信息。
(2)给定学号,显示某位学生的学生证信息。
(3)给定某个班级的班号,显示该班所有学生的学生证信息。
(4)给定某位学生的学号,修改该学生的学生证信息。
(5)给定某位学生的学号,删除该学生的学生证信息。
(6)提供一些统计给类信息的功能。
【输入要求】
应用程序运行后,在屏幕上显示一个菜单。
用户可以根据要求,选定相应的操作项目。
进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。
【输出要求】
(1)应用程序运行后,要在屏幕上显示一个菜单。
(2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
【提示】
设计时可采用结构体类型和一维数组类型,用来保存学生证的内容。
三、分析
由于题目要求给出清晰明确懂得信息,所以在程序中要提供各种不同功能的模块。
四、总体设计
五、具体设计及分析
1.主函数
主函数主要提供菜单界面以及各模板函数的调用。
以结构体的形式定义。
通过直到型循环以及switch语句来实现各功能模块的调用以及循环。
#include
#defineM30
main()/*主函数菜单*/
{
intn,w;
do
{
puts("\t\t***********************MENU*************************\n\n");
puts("\t\t\t\t1.录入\n");
puts("\t\t\t\t2.查询\n");
puts("\t\t\t\t3.修改\n");
puts("\t\t\t\t4.删除\n");
puts("\t\t\t\t5.统计\n");
puts("\t\t\t\t6.退出\n");
puts("\n\t\t****************************************************\n");
printf("请选择你需要做什么(1-6):
[]\b\b");
scanf("%d",&n);
if(n<1||n>6)
{
w=1;
getchar();
}
elsew=0;
}
while(w==1);
switch(n)
{
case1:
scanf_student();break;
case2:
search();break;
case3:
revise();break;
case4:
delete_student();break;
case5:
stat();break;
case6:
exit(0);
}
}
structstudent/*定义结构体*/
{
charnum[10];
charclass_num[10];
charname[10];
charsex[4];
charnation[10];
charnative[10];
intborn;
intave;
}
2.各功能模块的设计
(1)输入模块
主要用于录入学生的学生证信息,调用添加各文件函数
intscanf_student()
{
intn;
n=load();/*调用加载文件函数*/
input(n);/*调用添加记录函数*/
save(n);/*调用保存函数*/
printf_back();/*调用选择返回或结束函数*/
}
intload()/*加载文件记录并计算学生个数函数*/
{
FILE*fp;
inti;
if((fp=fopen("studentcard.txt","rb"))==NULL)
{
printf("\nCannotopenfile\n");
returnNULL;
}
for(i=0;!
feof(fp);i++)
fscanf(fp,"%s%s%s%s%s%s%d%d",st[i].num,st[i].class_num,st[i].name,st[i].sex,st[i].nation,st[i].native,&st[i].born,&st[i].ave);
fclose(fp);
return(i);
}
intinput(inti)
{
bijiao_num(i);/*调用确认学号不重复函数*/
class_input(i);/*调用输入班号函数*/
printf("\n姓名:
");
scanf("%s",st[i].name);
printf("\n性别:
");
scanf("%s",st[i].sex);
printf("\n民族:
");
scanf("%s",st[i].nation);
printf("\n籍贯:
");
scanf("%s",st[i].native);
printf("\n出生年月:
");
scanf("%d",&st[i].born);
st[i].ave=1;}
intnum_input(inti)/*输入学号函数*/
{
intj,k,w;
do
{
w=0;
printf("\n学号:
");
scanf("%s",st[i].num);
for(j=0;st[i].num[j]!
='\0';j++)/*确认学号仅由数字组成*/
if(st[i].num[j]<'0'||st[i].num[j]>'9')
{
printf("输入错误!
!
学号仅有0-9的数字组成!
请重新输入");
w=1;
break;
}
}
while(w==1);
}
intbijiao_num(inti)/*确认学号不重复函数*/
{
intj,k,w;
do
{
w=0;
printf("\n学号:
");
scanf("%s",st[i].num);
for(j=0;st[i].num[j]!
='\0';j++)/*确认学号仅由数字组成*/
if(st[i].num[j]<'0'||st[i].num[j]>'9')
{
printf("输入错误!
!
学号仅有0-9的数字组成!
请重新输入");
w=1;
break;
}
if(w!
=1)
for(k=0;k
if(strcmp(st[k].num,st[i].num)==0)
{
printf("这个学号已经存在!
!
请重新输入!
\n");
w=1;
break;
}
}
while(w==1);
}
intclass_input(inti)/*班号输入函数*/
{
intj,k,w;
do
{
w=0;
printf("\n班号:
");
scanf("%s",st[i].class_num);
for(j=0;st[i].class_num[j]!
='\0';j++)/*确认班号仅由数字组成*/
if(st[i].class_num[j]<'0'||st[i].class_num[j]>'9')
{
printf("输入错误!
!
班号仅有0-9的数字组成!
请重新输入");
w=1;
break;
}
}
while(w==1);
}
(2)查询模块
主要用于根据题目的要求来查询各学生的信息。
search()
{
intn,w;
do
{
puts("\t\t***********************MENU*************************\n\n");
puts("\t\t\t\t1.按学号查询\n");
puts("\t\t\t\t2.按班号查询\n");
puts("\t\t\t\t3.返回\n");
puts("\n\t\t****************************************************\n");
printf("请选择你需要做什么(1-3):
[]\b\b");
scanf("%d",&n);
if(n<1||n>3)
{
w=1;
getchar();
}
elsew=0;
}
while(w==1);
switch(n)
{
case1:
search_num();break;/*调用按学号查询函数*/
case2:
search_class();break;/*调用按班号查询函数*/
case3:
menu();/*调用主菜单函数*/
}
}
intsearch_num()/*按学号查询函数*/
{
intn,i;
chara[10];
printf("\n请输入要查询学生的学号:
");
scanf("%s",a);
n=load();/*调用加载函数*/
for(i=0;i{
if(strcmp(st[i].num,a)==0)
{
printf_face();/*调用显示数据结构项目函数*/
printf_one(i);/*调用输出一个学生数据函数*/
break;
}
}
if(i==n)/*判断是否查找到*/
printf("\n没有找到您要查询的学生!
请核对无误后重新输入!
");
printf_back();
}
printf_face()
{
printf("\n学号班号姓名性别民族籍贯出生年份\n");
}
printf_one(inti)
{
printf("%s%s%s%s%s%s%d\n",st[i].num,st[i].class_num,st[i].name,st[i].sex,st[i].nation,st[i].native,st[i].born);
}
intsearch_class()/*按班号查询函数*/
{
intn,i,k=0;
charb[10];
printf("\n请输入要查询的班号:
");
scanf("%s",b);
n=load();/*调用加载函数*/
printf_face();/*调用显示数据结构项目函数*/
for(i=0;i{
if(strcmp(st[i].class_num,b)==0)
{
printf_one(i);/*调用输出一个学生数据函数*/
k++;
}
}
if(k==0)/*判断是否查找到*/
printf("\n没有找到您要查询的班号!
请核对无误后重新输入!
");
else
printf("\n共查找到该班学生%d个",k);
printf_back();
}
(3)修改模块
主要用于根据学生的学号,修改该学生的学生证信息。
ntrevise()
{
intn,m;
n=load();/*调用加载文件函数*/
m=queren();/*调用确认修改函数*/
revise_one(m);/*调用修改一个学生信息函数*/
save(n);/*调用保存函数*/
printf_back();
}
intqueren()/*确认修改或删除函数*/
{
inti,n,c;
n=load();
printf("\n请输入要修改或删除学生的学号:
");
num_input(n+1);
for(i=0;iif(strcmp(st[n+1].num,st[i].num)==0)
break;
if(i==n+1)
printf("没有找到你输入的学号的学生!
!
请确认无误后重新输入!
");
else
printf_one(i);/*输出该学生信息*/
printf("输入1确认修改或删除\n输入0返回主菜单:
");
/*确认修改*/
scanf("%d",&c);
if(c==1)
return(i);
else
printf_back();}
revise_one(inti)/*修改一个学生信息函数*/
{
printf_face;
input(i);/*调用学生信息输入函数*/
}
(4)删除模块
主要用于根据学生的学号,删除该学生的学生证信息。
intdelete_student()
{
intm,n;
n=load();
m=queren();
st[m].ave=0;/*表示该记录要删除*/
save(n);
printf_back();
}
(5)统计模块
主要用于提供和统计各类信息,显示学生的信息。
主要按班号,性别,籍贯,民族,出生来统计。
intstat()
{intn,w;
do
{
puts("\t\t***********************MENU*************************\n\n");
puts("\t\t\t\t1.按班号统计\n");
puts("\t\t\t\t2.按性别统计\n");
puts("\t\t\t\t3.按民族统计\n");
puts("\t\t\t\t4.按籍贯统计\n");
puts("\t\t\t\t5.按出生时间\n");
puts("\t\t\t\t6.返回\n");
puts("\n\t\t****************************************************\n");
printf("请选择你需要做什么(1-6):
[]\b\b");
scanf("%d",&n);
if(n<1||n>6)
{
w=1;
getchar();
}
elsew=0;
}
while(w==1);
switch(n)
{
case1:
stat_class();break;
case2:
stat_sex();break;
case3:
stat_nation();break;
case4:
stat_native();break;
case5:
stat_born();break;
case6:
menu();
}
}
intstat_class()/*按班号统计函数*/
{
inti,n,j=0,b,d[M];
chara[10];
n=load();
printf("\n请输入要统计的班号:
");
scanf("%s",a);
for(i=0;iif(strcmp(a,st[i].class_num)==0)
d[j++]=i;
printf("共查找到%d位符合要求的学生\n",j);
printf("输入1查看详细信息\n输入0返回主菜单:
");
scanf("%d",&b);
if(b==1)
{
printf_face();
for(i=0;iprintf_one(d[i]);
}
printf_back();
}
intstat_sex()/*按性别统计函数*/
{
inti,n,j=0,d[M];
chara[4],b;
n=load();
printf("\n请输入要统计的性别:
");
scanf("%s",a);
for(i=0;iif(strcmp(a,st[i].sex)==0)
d[j++]=i;
printf("共查找到%d位符合要求的学生\n",j);
printf("输入1查看详细信息\n输入0返回主菜单:
");
scanf("%d",&b);
if(b==1)
{
printf_face();
for(i=0;iprintf_one(d[i]);
}
printf_back();
}
intstat_nation()/*按民族统计函数*/
{
inti,n,j=0,d[M];
chara[10],b;
n=load();
printf("\n请输入要统计的民族:
");
scanf("%s",a);
for(i=0;iif(strcmp(a,st[i].nation)==0)
d[j++]=i;
printf("共查找到%d位符合要求的学生\n",j);
printf("输入1查看详细信息\n输入0返回主菜单:
");
scanf("%d",&b);
if(b==1)
{
printf_face();
for(i=0;iprintf_one(d[i]);
}
printf_back();
}
intstat_native()/*按籍贯统计函数*/
{
inti,n,j=0,d[M];
chara[10],b;
n=load();
printf("\n请输入要统计的籍贯:
");
scanf("%s",a);
for(i=0;iif(strcmp(a,st[i].native)==0)
d[j++]=i;
printf("共查找到%d位符合要求的学生\n",j);
printf("输入1查看详细信息\n输入0返回主菜单:
");
scanf("%d",&b);
if(b==1)
{
printf_face();
for(i=0;iprintf_one(d[i]);
}
printf_back();
}
intstat_born()/*按出生年份统计*/
{
inti,n,j=0,a,d[M];
charb;
n=load();
printf("\n请输入要统计的出生年份:
");
scanf("%d",&a);
for(i=0;iif(a==st[i].born)
d[j++]=i;
printf("共查找到%d位符合要求的学生\n",j);
printf("输入1查看详细信息\n输入0返回主菜单:
");
scanf("%d",&b);
if(b==1)
{
printf_face();
for(i=0;iprintf_one(d[i]);
}
printf_back();
}
intmenu()
{
intn,w;
do
{
puts("\t\t***********************MENU*************************\n\n");
puts("\t\t\t\t1.录入\n");
puts("\t\t\t\t2.查询\n");
puts("\t\t\t\t3.修改\n");
puts("\t\t\t\t4.删除\n");
puts("\t\t\t\t5.统计\n");
puts("\t\t\t\t6.退出\n");
puts("\n\t\t****************************************************\n");
printf("请选择你需要做什么(1-6):
[]\b\b");
scanf("%d",&n);
if(n<1||n>6)
{
w=1;
getchar();
}
elsew=0;
}
while(w==1);
switch(n)
{
case1:
scanf_student();break;
case2:
search();break;
case3:
revise();break;
case4:
delete_student();break;
case5:
stat();break;
case6:
exit(0);
}
}
3.数据结构
structstudent/*定义结构体*/
{
charnum[10];
charclass_num[10];
charname[10];
charsex[4];
charnation[10];
charnative[10];
intborn;
intave;
}
4.公共函数
(1)保存功能函数
intsave(intn)
{
FILE*fp;
inti;
if((fp=fopen("studentcard.txt","wb"))==NULL)
{
printf("\nCannotopenfile\n");
returnNULL;
}
for(i=0;iif(st[i].ave!
=0)
fprintf(fp,"%s%s%s%s%s%s%d%d",st[i].num,st[i].class_num,st[i].name,st[i].sex,st[i].nation,st[i].native,st[i].born,st[i].ave);
fclose(fp);
}
intprintf_back()
{
inta;
printf("\n输入1回主菜单,0退出程序:
");
scanf("%d",&a);
if(a==0)
exit(0);
else
menu();
}
六、上机操作
七、上机感想
通过这次上机课,我在真真领会到计算机的真谛,对计算机有了初步的了解。
通过这次编程我也认识到了自己在于计算机方面的不足。
对于计算机编程,如果仅仅只是停留在书本上是没有用的,要经常上机,经常摸索才能够及时发现自己的不足,认识自己的错误。
也只有经常上机才能够感受到计算机编程的乐趣。