C语言课程设计学生信息管理系统.docx
《C语言课程设计学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生信息管理系统.docx(14页珍藏版)》请在冰豆网上搜索。
![C语言课程设计学生信息管理系统.docx](https://file1.bdocx.com/fileroot1/2022-10/24/97898bcb-5f4f-47cb-be2d-87e44f8188ab/97898bcb-5f4f-47cb-be2d-87e44f8188ab1.gif)
C语言课程设计学生信息管理系统
C语言课程设计
题目:
学生信息管理系统
学号:
**
姓名:
***
班级:
信计1102
成绩:
正文
系统功能
本程序利用结构体数组及函数的调用完成对学生基本信息的动态管理。
可以对学生基本信息进行录入、查询、删除、修改、浏览、成绩汇总的功能。
设计思想
利用宏定义,函数的调用及结构体数组,通过菜单选择的方式,在不同函数功能间进行切换,从而达到实验设计的目的、使之具有学生信息管理的功能。
概要设计
1.模块介绍:
采用模块化设计,功能放在各模块中实现。
主函数是程序的入口,在其中声明一些必要的变量,设计以无限循环程序,循环体为一个switch语句,该语句的条件是通过调用主菜单函数得到返回值,根据该返回值调用相应的各功能函数,同时要设置一个循环结束条件,以免造成死循环。
2.系统流程:
详细设计
1.代码介绍:
本程序中,用num、name、banji、age、sex、birthday、addr、phone、course、grade,来分别代表学生的学号、姓名、班级、年龄、性别、出生日期、住址、电话、所选课程、分数。
然后再利用结构体数组,将其归为学生的属性。
再用enter、print、save、search、del、modify、rank、return,来分别表示学生信息的输入、浏览、录入、查找、删除、修改,学生成绩的汇总,程序的返回的功能。
在程序中,通过对各个代码的使用及各功能函数的调用,可实现本程序设计目的。
2.函数介绍:
1.main()主函数
主函数是程序的入口,在其中定义一些必要的变量,设计以无限循环程序,循环体为一个switch语句,该语句的函数是通过调用主菜单函数得到返回值,根据返回值调用相应的各功能函数,同时要设置一个循环结束条件,以免造成死循环。
2.menu()函数----制作菜单
通过printf()函数在屏幕上绘制一个菜单,将菜单进行编号,并显示一个提示输入选项,输入1~8之间的数字。
输入选项就是输入菜单编号,该输入项将作为函数的返回值带到主函数,主函数根据这个数字调用相应的功能函数。
3.enter()函数-----输入记录
当在主菜单中输入了1,表明选择了输入记录功能选项,即为结构体赋值。
由于所定义的数组的大小往往大于实际的纪录数,所以要确定输入的记录数n,然后用for循环语句循环n次,按照提示逐个输入学生信息。
每输入一个就按一下Enter键,输入n个记录后,则循环结束,返回记录数到主函数。
4.save()函数-----保存记录到文件
将学生信息保存到指定文件中。
按照文件读写要求,先定义一个指向文件的指针,输入要保存的磁盘文件名。
然后确定文件的打开方式,打开文件。
如果文件打不开,则退出程序,否则选择一种写文件方式,利用循环从数组的第一个元素开始,依次将记录写入文件,直到所有记录写完为止。
5.search()函数-----查找记录
查找可以按照多种信息进行查找,以按姓名查找记录为例,从第一条记录开始顺序查找,如果找到记录,则显示记录信息;若找不到记录,显示“无该学生”的提示信息。
由于姓名为字符串,所以可利用字符串比较函数strcmp().
6.del()函数------删除记录
删除指定学号的学生记录。
首先输入要删除记录的学号,然后利用for循环查找记录。
如果没找到,则输出没找到信息;否则,删除记录。
要删除数组中某一条记录,实际所做的操作是将其后继记录依次前移一条,所以,删除第i条记录,用for语句,从第i+1条记录开始,依次将每个字段复制到前一条记录的相应字段,即覆盖了前一条记录,从而达到前移的目的,直到最后一条记录为止,最后使记录数减1。
7.modify()函数-----修改记录数据
记录数据完成后,若要对数据进行修改,则修改时,输入有错误记录的学号,通过循环比较找到该记录,然后逐个判断。
8.print()函数-------浏览记录
学生信息表建好后,更频繁的操作是显示和查找记录,本函数实现显示所有记录的功能。
用for循环将主函数传递过来的数组输出,循环次数由参数(记录个数)决定。
9.rank()函数-------成绩汇总
学生信息录入完成后,若要对学生中不及格学生成绩进行汇总,则可利用for循环将各个学生成绩与60比较,将不及格学生信息输出,从而达到不及格学生汇总的功能。
10.return()函数----返回
操作完成后,如要结束程序的运行,可利用该函数实现程序的结束。
源程序
#include
#include
#include
#definePRprintf
#defineM100
structstudent
{
charnum[10];
charname[10];
charbanji[4];
charage[3];
charsex[3];
charbrithday[10];
charaddr[5];
charphone[11];
charcourse[4];
floatgrade;
}stud[M];
intenter(structstudentstud[]);
voidprint(structstudentstud[],intn);
voidsearch(structstudentstud[],intn);
voiddel(structstudentstud[],intn);
voidmodify(structstudentstud[],intn);
voidrank(structstudentstud[],intn);
voidsave(structstudentstud[],intn);
intmenu();
voidmain()
{
structstudentstud[M];
intlength;
for(;;)
switch(menu())
{
case1:
length=enter(stud);break;
case2:
save(stud,length);break;
case3:
print(stud,length);break;
case4:
search(stud,length);break;
case5:
del(stud,length);break;
case6:
modify(stud,length);break;
case7:
rank(stud,length);break;
case8:
return;
}
}
intmenu()
{
intchoice;
PR("欢迎来到学生信息管理系统!
\n");
PR("**************主菜单***************\n");
PR("*1----学生信息录入*\n");
PR("*2----学生信息保存*\n");
PR("*3----学生信息浏览*\n");
PR("*4----学生信息查询*\n");
PR("*5----学生信息删除*\n");
PR("*6----学生信息修改*\n");
PR("*7----不及格学生成绩汇总*\n");
PR("*8----返回*\n");
PR("***********************************\n");
do
{
PR("\nEnteryouchoice(1~8):
");
scanf("%d",&choice);
}
while(choice<1||choice>8);
returnchoice;
}
voidsave(structstudentstud[],intn)
{
FILE*fp;
inti;
charoutfile[20];
printf("Enteroutlinename.forexamplec:
\\cfile\\inf.tex\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL)
{
printf("cannotopenfile\n");
return;
}
else
{
for(i=0;ifwrite(&stud[i],sizeof(structstudent),1,fp);
fclose(fp);
printf("------保存成功!
!
------\n");
}
}
intenter(structstudentstud[])
{
intj,n;
PR("\npleaseinputrecordnumber:
");
scanf("%d",&n);
PR("\npleaseinputthedataofstudent:
\n");
for(j=0;j{
PR("enternum:
");
scanf("%s",stud[j].num);
PR("entername:
");
scanf("%s",stud[j].name);
PR("enterbanji:
");
scanf("%s",stud[j].banji);
PR("enterage:
");
scanf("%s",stud[j].age);
PR("entersex:
");
scanf("%s",stud[j].sex);
PR("enterbrithday:
");
scanf("%s",stud[j].brithday);
PR("enteraddr:
");
scanf("%s",stud[j].addr);
PR("enterphone:
");
scanf("%s",stud[j].phone);
PR("entercourse:
");
scanf("%s",stud[j].course);
PR("entergrade:
");
scanf("%f",&stud[j].grade);
}
returnn;
}
voidprint(structstudentstud[],intn)
{
intj;
PR("|学号|姓名|班级|年龄|性别|出生日期|籍贯|电话号码|所选课程|成绩|\n");
for(j=0;jPR("%s%s%s%s%s%s%s%s%s%2.2f\n",stud[j].num,stud[j].name,stud[j].banji,stud[j].age,
stud[j].sex,stud[j].brithday,stud[j].addr,stud[j].phone,stud[j].course,stud[j].grade);
getchar();
}
voidsearch(structstudentstud[],intn)
{
intk,j;
PR("7-----按学号进行查询\n");
PR("8-----按班级进行查询\n");
PR("9-----按性别进行查询\n");
PR("请输入查询方式对应的数字:
\n");
scanf("%d",&