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