考勤管理程序
《C语言程序设计》
题目 考勤管理程序
一、 内容
学生考勤系统应包含各班学生的全部信息。每个学生是一条记录,包括姓名、性别、
学号、出勤情况等。本系统可模拟考勤过程,记录考勤结果,并能够在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。
二、上机环境
操作系统:window xp 开发工具: VC++6.0
四、各函数功能说明
Main() 主函数
void start(void) 主函数的辅助函数——start函数。 void found(void) 用于建立学生列表。 void search(void) 用于查询学生信息。
void search1(void) 第1种查询类型的函数。按学号 void search2(void) 第2种查询类型的函数。按姓名 void add(void) 用于模拟考勤过程。 void mark(void) 用于计算考勤分数。
五、算法描述或流程图
void start() /*主函数的辅助函数——start函数。*/
{
char x;
void found();void search();void add();void mark();
printf("######################################\n"); printf("# 请选择所需功能,输入对应数字: #\n"); printf("# 1.建立学生列表 #\n");
printf("# 2.查找学生信息 #\n"); printf("# 3.模拟考勤过程 #\n"); printf("# 4.计算考勤分数 #\n"); printf("# 5.退出 #\n"); printf("# #\n"); printf("######################################\n"); printf("请输入对应数字:");scanf("%S",&x);
switch(x) /*利用switch函数实现子函数的选择功能。*/ {
case'1':found();break; 运行found函数 case'2':search();break; 运行search函数 case'3':add();break; 运行add函数 case'4':mark();break; 运行mark函数 case'5':break; 退出循环
default :printf("****输入有误,请重输:\n");start(); }
} 通过switch循环,选择运行相应的子函数模块。 Found函数
Search()函数
Search1函数
Add函数
Mark函数
六、程序运行效果图 进入系统
建立学生信息
查找信息
模拟考勤
计算分数
七、总结
整个系统的设计过程对于我来说算是个学习、探索的过程,通过实践和对比别人开发程序的过程。在整个设计过程中,出现过很多的问题,很多繁琐的东西都需要反复的修改,主要是前期工作不彻底,对系统的需求分析的要求认识不够清楚,使得在后边的工作中不得不经常反复去修改。使我体会到设置中每一步的重要性。所以在分析一个问题时,我们需要站在一个有远见的高度。
通过此次设计,我不但对C语言编程有了更深刻的认识,积累了使用软件工程的思想来开发软件的经验,更重要的是学会了在对待问题时应该考虑到哪些方面和怎么解决问题。
虽然时间紧迫但我学会了很多,也感到自身知识的贫乏,希望在日后的努力中能做出更完善的系统。
这次C语言的程序设计,对于我来说是一个挑战。我在C语言的学习过程中的困难并不只在程序的设计中有所体现,每一个函数都设计好了,也调试好了,把它们分开运行并没有错误,但是当把它们组合成一个程序时,便是一个一个地出现错误;把这个问题解决了,另一个新问题又来了。这不能不说是对知识的欠缺。通过这次的程序设计,我懂得了无论什么事都要去做才会发现问题,才有可能去解决问题。对知识的学习,不能潜偿辄止,要深入去学习,去了解,这样才会有所收获。有许多东西,许多事,不是想像中的那么容易,不去实践,永远也不会有提高,尤其是学习计算机。同时,在这次课程设计的过程中,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,不能只是学习和重视书本上的理论知识,所以日后在学习过程中,我会更加注视实践操作,使自己更好地学好计算机这门课程。
以前做实验题目的时候总是感觉很难,因为根本就不知道从哪里开始。这次课程设计让我对编程有了新的认识,也是我知道了只有自己亲自动手才能学到更多东西。
拿到题目的时候也是很困惑但仔细琢磨后也不是想象中那么难,觉得就是上课讲到的一些内容,是自己先把自己吓住了。
后来,参照书上的和网上的诸多例子,一个模块一个模块的编写,调试,一个功能一个功能去完善。发现越做越顺利,由于以前的实验中对于改错的经验积累和几个学得不错的同学的帮助,我的程序中的错误也一个一个的顺利解决。
再后来,等我的程序完全做好以后,我竟然可以独立的帮同学修改一些以前根本不知所以然的错误,其实,从这次实验中我认识到,我距离高手还很远,编程有很多的乐趣也有很多的技巧性和知识性。我将在以后的日子里继续认真的学习知识,积累经验,让自己的编程能力提高。
总之,我觉得编程就是要请自动手,孰能生巧,感谢学校给我们这次机会使我们通过这次试验学到了很多东西。
八、参考文献
[1]谭浩强 C程序设计(第三版)清华大学出版社,2005
[2]l李春葆 C语言程序设计教程(第2版)清华大学出版社 2011
九、程序清单(双列排版,小五号字)
#include #include"stdlib.h" #include"conio.h" #include /*头文件。*/ int
SIZE; /*宏定义。*/ int CLASS;
struct student /*定义一个结构体数组,包含学生信息。*/ {
char name[9]; char sex[4]; int number; int count; int score; }stu[300]; void
main() /*主函数,选择界面。*/ {system("color 1E"); void start(); 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 请 输 入 班 级 人 数 :
");scanf("%d",&SIZE); printf("\n"); printf("\t请
输
入
课
程
节
数
:
");scanf("%d",&CLASS);
printf("======================================\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n");
printf("\n");
printf("\n"); printf("\n"); start(); }
void start() /*主函数的辅助函数——start函数。*/ { char x; void found(); void search(); void add(); void mark();
printf("######################################\n");
printf("# 请选择所需功能,输入对应数字:#\n");
printf("# 1.建立学生列表#\n");
printf("# 2.查找学生信息 printf("学号:"); #\n"); #\n"); #\n"); scanf("%d",&stu[a].number); stu[a].score=0;
fp=fopen("stud","w"); /*新建一个文 printf("# 3.模拟考勤过程 stu[a].count=0; printf("# 4.计算考勤分数 }
printf("# 5.退出 件,运用 for 函数将学生信息写入文件。 */
#\n");
printf("# #\n");
printf("######################################\n");
printf("请输入对应数字:");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();
} }
void found() /*第一个子函数——found函数,用于建立学生列表。*/ { int a;
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);
for(a=0;a
if(fwrite(&stu[a],sizeof(struct student),1,fp)!=1)
printf("文件输入错误。\n"); } fclose(fp); printf("\n");
printf("建表如下:\n");
fp=fopen("stud","r"); /*读取新建的文件,并输出。*/
printf("姓名 \t性别 \t学号 \t缺课数 \t考勤分数 \n");
printf("----------------------------------------------\n"); for(a=0;a
fread(&stu[a],sizeof(struct student),1,fp); printf("%s \t%s
\t%d
\t%d
\t%d\n",stu[a].name,stu[a].sex,stu[a].number,stu[a].co
unt,stu[a].score); } fclose(fp); printf("\n"); printf("\n");
printf("=======================================\n");
printf("# 记录完毕#\n");
printf("# 欢迎下次再来。#\n");
printf("=======================================\n"); printf("\n"); printf("\n"); printf("\n");
printf("\n");
start(); /*返回主函数的辅助函数,即主菜单。*/ }
void search() /*第二个子函数——search函数,用于查询学生信息。*/ { char b; void search1(); void search2();
printf("****************************************\n");
printf(" 请选择:\n");
printf(" 1.按姓名查找。\n"); printf(" 2.按学号查找。\n");
printf("****************************************\n");
printf("请输入对应数字:"); 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"); printf("\n"); printf("\n"); printf("\n"); printf("\n");
start(); /*返回主函数的辅助函数,即主菜单。*/ }
void search1() /*第1种查询类型的函数。*/ { int c;
char student_name[9];
FILE *fp; /*打开已建立的文件并将其输出到屏幕上。*/ fp=fopen("stud","r");
for(c=0;c
fread(&stu[c],sizeof(struct student),1,fp); } 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
{
printf("
已
查
到
*******************************************\
n");
printf("姓名:%s 性别:%s 学号:%d 缺课
数:%d\n",stu[c].name,stu[c].sex,stu[c].number,stu[c].count); } }
}
void search2() /*第2种查询类型的函数。*/ { int c; int d; FILE *fp;
fp=fopen("stud","r");
for(c=0;c
fread(&stu[c],sizeof(struct student),1,fp); } 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);
}
}
}
void add() /*第三个子函数——add函数,用于模拟考勤过程。*/ { int e,f,y;
struct name /*再建立一个叫name的结构体数组。*/ {
char nam[9]; }na[300]; FILE *fp;
fp=fopen("stud","r"); /*打开已建立的文件并将其输出到屏幕上。*/ for(e=0;e
fread(&stu[e],sizeof(struct student),1,fp); } 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
{
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(struct student),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(struct student),1,fp); printf("%s \t%s
\t%d
\t%d\n",stu[f].name,stu[f].sex,stu[f].number,stu[f].cou
nt); } fclose(fp); printf("\n"); printf("\n"); printf("\n"); printf("\n");
printf("=======================================\n"); printf("# 考勤完毕 #\n"); printf("# 欢迎下次再来。 #\n");
printf("=======================================\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n");
start(); /*返回主函数的辅助函数。*/ }
void mark() /*第四个子函数——mark函数,用于计算考勤分数。*/ { int g;
FILE *fp; /*打开更新的文件并将其输出到屏幕上。*/ fp=fopen("stud","r+");
for(g=0;g
fread(&stu[g],sizeof(struct student),1,fp); } printf("\n"); printf("\n"); printf("\n"); printf("\n");
printf("********************************\n"); printf(" 评分开始。\n");
printf("********************************\n"); for(g=0;g
if(stu[g].score
stu[g].score=0;
} fclose(fp);
fp=fopen("stud","w"); /*将更新的学生列表信息写入原文件中。*/ for(g=0;g
{
if(fwrite(&stu[g],sizeof(struct
student),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(struct student),1,fp); printf("%s unt,stu[g].score); } fclose(fp); printf("\n"); printf("\n"); printf("\n"); printf("\n");
printf("=======================================\n");
printf("# 评分完毕 #\n");
printf("# 欢迎下次再来。 #\n");
printf("=======================================\n"); printf("\n"); printf("\n"); printf("\n"); printf("\n");
start(); /*返回主函数的辅助函数,即主菜单。*/ }
\t%s
\t%d
\t%d
\t%d\n",stu[g].name,stu[g].sex,stu[g].number,stu[g].co