C语言课程设计学生考勤系统.docx
《C语言课程设计学生考勤系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生考勤系统.docx(15页珍藏版)》请在冰豆网上搜索。
C语言课程设计学生考勤系统
设计任务:
C语言课程设计任务书
题目:
学生考勤系统设计
功能:
学生考勤系统应包含各班学生的全部信息。
每个学生是一条记录,包括姓名、性别、学号、出勤情况等。
本系统可模拟考勤过程,记录考勤结果,并能够在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。
分步实施:
1、初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;
2、建立一个文件,将每条记录信息写入文件中并能显示于屏幕上
)
3、完成上述添加(出勤情况)、查找(学号,姓名,性别等)、修改等功能。
4、进一步要求:
自动给出每个学生的考勤分数
要求:
1、用C语言实现程序设计;
2、利用结构体数组实现信息的数据结构设计;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序加必要的注释。
<
总评成绩:
指导教师:
附件:
《学生考勤系统》主要源程序代码
SincludeOintSIZE;
ftincludeO
头文件。
♦/
/*宏定义。
*/
intCLASS;
structstudent/*定义一个结构体数组,包含学生信息。
♦/
{
charname[9]:
charsex〔4];
intnumber;
intcount;
intscore;
}stu[300];
voidmain()/*主函数,选择界面。
*/
{
voidstart():
printf("\n");
printf('An'1);
printf('An'1);
printf('An'1);
printf(鼻#####################################\十);
printf('*#学生考勤系统#\n");
printf(,r#欢迎您#\n,r):
printf(”######################################\十);
printf(,,\nn);
printf("\n");
printf('An'1);
printf('An'*);
printf;
printf('At请输入班级人数:
\n");
printf(”######################################、十);scanf(H%d\&SIZE);
printf('An'*);
printf(”######################################\十);
printf(,f\t请输入课程节数:
\n");
printf(鼻#####################################\十);scanf("%d",&CLASS);
printf(,r\n,r);
printf('An'1);
printf('An'1);
printf("\n");
start();
charx;
voidfound():
voidsearch():
voidadd();
voidmark();
printf(,r)
printf(,r#
请选择所需功能,输入对应数字:
#\十)
printf('*#
1.建立学生列表
#\十)
printf('*#
2•查找学生信息
#\十)
printf(,r#
3•模拟考勤过程
#\十)
printf(,r#
4•计算考勤分数
#\十)
printf(,r#
5.退出
#\n")
printfC1#
#\十);
printf(乍#####################################\十);scanf("%S",&x);
switch(x)/*利用switch函数实现子函数的选择功能°*/
{
case'1':
found():
break;
case'2’:
search():
break;
case'3’:
add():
break;
caser4r:
mark():
break;
case'5’:
break;
default:
printf(,r****输入有误,请重输:
\n"):
start();
}
}
voidfound()/*第一个子函数found函数,用于建立学生列表。
*/
{
inta;
printf(”####################\十);
printf(,r开始建表。
\n");
printf(”####################\十);
FILE*fp;
for(a=0;a*/
{
printf(H请输入第%d个学生的个人信息:
\nM,a+l);printf(,r姓名:
");
scanf(”%s",stu[a].name);
printf(,r性别:
”);
scanf("%s",stu[a].sex);
printf("学号:
”);
scanf("%d",&stu[a].number);
stu[a].count=0;
stu[a].score=0;
}
fp二fopen("stud","w");/*新建一个文件,运用for函数将学生信
息写入文件。
*/
for(a=0;a{
if(fwrite(&stu[a],sizeof(structstudent),1,fp)!
=1)printf(,r文件输入错误。
\n");
}
fclose(fp);
printf('^\n'^);
printf('An'*);
printf('An'*);
printf('An'1);
printf(w建表如下:
\nw):
fp二fopen("stud","r");/*读取新建的文件,并输出。
*/
printf("姓名\t性别\t学号\t缺课数\t考勤分数\nff);
printf('*\n");
for(a=0;afread(&stu[a],sizeof(structstudent),1,fp);
printf(w%s\t%s\t%d\t%d
\t%d\n'r,stu[a].name,stu[a].sex,stu[a],number,stu[a].count,stu[a].score);
}
fclose(fp);
printf('An'1):
printf(',\n'r);
printf("\n'r);
)
printf('An'*);
printf("#######################################\n“);
printf("#记录完毕#\n'r);
printfC#欢迎下次再来。
#\nn);
printf("#######################################\n“);
/*第二个子函数search函数,
用于查询学生信息。
*/
charb;
voidsearchi();
voidsearch2():
printf(,r****************************************\口”);printf(tt请选择:
\n");
printf(,r1•按姓名查找。
\n");
printf(,r2•按学号查找。
\n");printf(”****************************************\n”);scanf("%s",&b);switch(b)
/*运用switch函数,构成选择结构,可供选择查询类型。
*/
case'1r:
searchi();break;case'2’:
search2();break;
/*进入第1种查询类型的函数。
*//*进入第2种查询类型的函数。
*/default:
printf('r****输入有误,请重输:
"):
search();}
printf("\n");
printf('An'1);
printf('An'1);
printf("\n");
printf(”#######################################\十);printf("#查找完毕#\n");
printf("#欢迎下次再来。
#\十);
printf(鼻######################################\十);
start();
}
voidsearchi()
{
intc;
charstudent_name[9]:
FILE*fp;
fp=fopen(,rstud,\,rrn);
/*返回主函数的辅助函数■即主菜单。
*/
/*第1种查询类型的函数。
*/
/*打开已建立的文件并将其输岀到屏幕上。
*/
printfC姓名\t性别\t学号\t缺课数\t考勤分数\nM);printf(,F\n")
for(c=0;cfread(&stu[c],sizeof(structstudent)丄fp);
printf(w%s\t%s\t%d\t%d
\t%d\n'r,stu[c]・name,stu[c]・sex,stuLc]・number,stu[c]・count,stu[c]・scor
fclose(fp);
printf(,r\n,r);
printf('^\n'^);
printf('An'1);
printf('An'1);
printfC1请输入要查询学生姓名:
");
scanf("%s",student_name);printf("\n");printf(,r\n,r);
printf(,r\n,r);printf("\n");
for(c二0;c/*运用for循环和strcmp函数逐个比较输入的姓名与列表中学生的姓名,找到相同的
后输出该学生的信息。
*/
{
if(strcmp(studentname,stu[c]・neinie)==0)
{"
printf(,r已查到
*******************************************\n”);
printf("姓名:
%s性别:
%s学号:
%d缺课
数:
%d\n,r,stu[c]・neinie,stu[c]・sex,stu[c]・number,stu[c]・count);
}
}
/*第2种查询类型的函数。
*/
}
voidsearch2()
{
intc;
intd;
FILE*fp;
fp=fopen("stud","r");
printf("姓名\t性别\t学号\t缺课数\t考勤分数\nw);
printf('f\n");
for(c=0;cfread(&stu〔c],sizeof(structstudent),1,fp);
printf(n%s\t%s\t%d\t%d
\t%d\n'r,stu[c]・name,stu[c]・sex,stu[c]・number,stu[c]・count,stu[c]・score);
}
fclose(fp);
printf("\n");
printf('^\n'^);
printf('^\n'^);
printf('An'*);
printf(ff请输入要查询学生学号:
");scanf(,,%d*\&d);
printf(H\n,r);
printf(,r\n,F);printf;
printf(,r\n,r);
for(c=0;cf
/*同第1种查询类型的函数,用for循环逐个比较输入的学号与列表中学生的学号,找到相同的后输出该学生的信息。
♦/
if(d==stu[c]・number)
{
printf('*已查到
*********************************************\n“);
printf(,r姓名:
%s性别:
%s学号:
%d缺课数:
%d\n,r,stu[c]・neinie,stu[c]・sex,stu[c]・number,stu[c]・count);
}
}
}
voidaddO/*第三个子函数一一add函数,用于模拟考勤过程。
♦/
{
inte,f,y;
structname/*再建立一个叫name的结构体数组。
*/
charnam|9|:
}na[300]:
FILE*fp;
fp二fopen("stud",l");/*打开已建立的文件并将其输出到屏幕上。
*/
for(e=0;efread(&stu〔e]tsizeof(structstudent),l,fp);
printf(,r%s\t%s\t%d\t%d
\t%d\n'r,stu[e]・nanie.stu[e]・sex,stuLe]・number,stu[e]・count,stu[e]・scor
fclose(fp);printf("\n");printf('^\n'^);printf('^\n'^);printf("\n");
printf(,r模拟考勤开始。
\n,r);
for(e=0;e姓名,再依次与列表中的学生姓名逐个比较。
{
printf("请输入第%d节课未到的学生姓名并以“over”结束:
”,e+1);for(y=0;y<=SIZE;y++)
{
scanf("%s",na[y]・nani);for(f=0;f{
if(strcmp(na[yj.nam,stu[f].name)==0)/*如果输入的姓名与某个学生姓名相同,在其count的信息中加1。
♦/stu[f]・count++;
}
if(strcmp(na[y].nam,MoverH)==0)/*循环结束,遇到
"over",退出循环。
*/break;
}
}
fp二fopen("stud","w");/*将新的列表数据写入原文件中。
*/
for(e二0;e{
if(fwrite(&stu[e],sizeof(structstudent),1,fp)!
=1)printf(,r文件输入错误。
\n");
fclose(fp);
printf("\n");
printf("\n");
printf('An'1);
printf('An'1);
printf(w模拟考勤完毕,结果如下:
\nw);
fp=fopen(wstudff,ttrtt);/*打开更新的文件并将其输出到屏幕上。
*/
printf(w姓名\t性别\t学号\t缺课数\nM);
printf('*\n");
for(f=0;f{
fread(&stuff],sizeof(structstudent),1,fp);
printf(w%s\t%s\t%d
\t%d\n",stu〔f].name,stu[f].sex,stu[f].number,stu[f].count);
}
fclose(fp);
printf('An'1);
[
printf("\n");
printf("\n");
printf(,,\n,t);
printf("#考勤完毕#\n");
printf("#欢迎下次再来。
#\n");
printf(,r");
start();/*返回主函数的辅助函数。
*/
t
}
voidmark()/*第四个子函数mark函数,用于计算考勤分数。
*/
{
intg;
FILE*fp;/*打开更新的文件并将其输出到屏幕上。
*/
fp二fopen("stud","r+");
printf("姓名\t性别\t学号\t缺课数\nM);
printf("\n");
for(g=0;g{
fread(&stu[g],sizeof(structstudent),1,fp);
printf(w%s\t%s\t%d
\t%d\n",stu[g].name,stu[g].sex,stu[g].number,stu[g].count);
}
printf('An'1);
printf(,r\n,F);
printf(,r********************************\n,r);
printf(”评分开始。
\n");
printf("********************************'□");
/*缺一节课扣五分。
♦/
stu[g]・score=(100-stu[g].count*5);if(stulgj.score<0)
stu[g]・score=0;
}
fclose(fp);
/*将更新的学生列表信息写入原文件中。
*/
fp二fopen("stud","w");for(g=0;gif(fwrite(&stu[g]tsizeof(structstudent),l,fp)!
=1)printf(,r文件输入错误©\n,r);
}
fclose(fp);
printf('An'1);
printf('An'1);
printf(,r\n,r);
printf('An'1);
printf(,r结果如下:
\n");
fp=fopen(,rstud\,rr,r);/*打开更新的文件并将其输出到屏幕上。
♦/
printfU姓名\t性别\t学号\t缺课数\t考勤分数\n,r);
printf(
for(g二0;g—\n,r);
t
fread(&stu[g],s
izeof(structstudent)r1,fp):
printf(,r%s
\t%s
\t%d
\t%d
\t%d\n'r,stu[g]・name,stu[g]・sex,stu[g]・number.stu〔g]・count,stu[g]・scor
fclose(fp);printf('^\n'^);printf("\n");printf("\n");
printf,r)printf(”#######################################\十);
start();/*返回主函数的辅助函数■即主菜单。
*/