资源描述
东北电力大学理学院C语言课程设计报告
《C语言》课程设计报告
学生姓名:
学 号:
学 院:
理学院
班 级:
题 目:
学生考勤系统
指导教师: 李鹏松 职称: 教 授
胡建平 副教授
朱振菊 实验师
2015年07月13日
II
目 录
目录…………………………………………………………………………… I
一、选题背景………………………………………………………………… 1
1.1 课题背景…………………………………………………………….1
1.2 编写目的…………………………………………………………….1
1.3 本课题所需解决的问题………………………………….………2
1.4 技术要求…………………………………………………………… 2
二、算法设计…………………………………………………………………2
2.1 问题分析…………………………………………………………… 2
2.1.1 题目…………………………………………………………..3
2.1.2 功能要求……………………………………………………..3
2.2 需求分析…………………………………………………………….3
2.2.1 功能需求……………………………………………………..3
2.2.2 设计方案……………………………………………………..4
2.2.3 流程图………………………………………………………..5
三、程序设计及功能说明…………………………………………………… 6
3.1 主要自定义函数分析…………………………………….………… 6
3.1.1 select函数…………………………..……………...………. 6
3.1.2 check函数…………………………………………….….....7
3.1.3 manage函数…………………………………….…....……..8
3.1.4 modify函数……………………………………………….10
3.1.5 calculate函数…………………………………….………...11
四、结果分析…………..…………………………………………….……… 12
4.1 运行结果…………………………………………………………… 12
五、总结及心得体会…..…………………………………….……………… 14
参考文献…………….…..…………………………………………………… 15
源程序………………..…..…………………………………………………...16
一、 选题背景
1.1课题背景
程序实践是本科生重要教学环节之一。通过程序实践,强化学生的计算机应用技能,使学生验证、巩固和充实所学的理论知识, 加深对相关内容的理解,拓宽知识面,培养学生的创新精神和实践能力 学生考勤管理程序是学校管理工作中一个比较重要的任务,过多的学生考勤管理程序工作给学校管理人员带来了很大麻烦的。虽然原始的记录方法在一定的程度上可以解决问题,可是现在计算机已经走到了我们的生活,它的不足之处就显而易见了。 学生考勤管理程序,是一个对于学生考勤的管理系统, 不仅大大减少了考勤管理人员的大量的工作,而且还方便了班级和学校对学生出课率的查询,只要通计算机登入本系统就能及时修改、更正学生的考勤信息,使信息真实、有效。这样节省了大量人力物力,节省了宝贵的时间,大大提高了工作效率.用C语言进行了该系统的编写。操作上力争实现人性化、合理化,满足学校、老师、非计算机管理人员的使用和查看
1.2编写目的
作为用户与该系统软件开发维护人员共同遵守的软件需求规范说明,本《软件需求说明书》的主要目的是明确所要开发的软件所应具有的功能、性能,使系统分析人员和软件设计人员能清楚地了解用户的需求,并在此基础上进一步提出概要设计和完成后续设计与开发工作,为软件开发范围、业务处理规范提供依据,也是应用软件进行合同最终验收的依据。 系统对学校全体学生的资料和考勤情况进行管理,通过每日的打卡把出勤信息输入到学校的考勤管理中心,保存学生每日的的出勤情况,以便于统计学生的出勤情况。同时方便班长查阅,即节省了人力,又省去了中间的很多容易出错的步骤。让学校学生的考勤管理更具有透明性,且方便管理。 此外系统还涉及系统数据安全和用户管理的问题、各种代码使用和维护问题、数据安全和数据维护问题、统计报表生成和输出等问题,因此还要求系统具有系统管理和事务处理功能。总而言之,要求通过系统的开发,达到系统项目的总体目标是:在整个系统的框架下,结合学生在学校的实际出勤情况的需要实现对数据更新、数据查询、数据统计、数据分析等功能进行有效的管理。并提供用户友好接口,满足学校管理需求的软件,提高学校对学生的管理效率,从而完善学校的管理制度。 预期的读者就是各类学校的系统管理员或系统求购者,使用前仔细阅读此软件说明是很必要的,以便更好的使用、管理和维护此系统!
1.3本课题所需解决的问题
当代大学课堂中的考勤方式多为课堂上教师点名的模式,这种方法是一种浪费教育资源的体现。老师点名一方面是为了留住学生,另一方面也是为学生负责,对那些出勤的学生负责。但是点名是一件耗费时间的事情,老师在讲台上逐个地念名字,同学答到,至少耗时五分钟。然而,学生在讲台下,则需要十分认真地等念到自己的名字,这严重浪费了课堂时间和课堂精力。如果学生用自主签到作为考勤基本方式,可以变被动为主动,这样不仅仅节省了课堂时间,提高了课堂学习效率;还提高学生自主管理意识和能力。
1.4技术要求
该系统是基于C语言这门基础的计算机语言设计开发的,该系统的制作需要我们对于指针,结构体能够熟练地应用,从而实现对于文件的修改、储存、读取等等。该系统工具采用Micrisift Visual C++6.0。首先设计一个教师用的信息输入界面,利用所学c语言知识编写程序,有运用算法,用N-S流程图表示算法,还有c语言各种数据类型运算符表达式等,其中有整形变量的应用来输入输出成绩等,字符型变量等,还有运用c语言顺序程序设计中的各种函数表达等,并且运用了选择结构,循环结构的运用,运用数组的应用来表出数据,应用函数参数、函数的值、函数的调用、还有函数的嵌套调用递归调用来计算学生最后输出的成绩等,应用了局部变量和全局变量。应用结构体变量、结构体数组等来做该系统。并且应用文件的各种知识,例如文件的读写、文件的定位、出错的检测等工具。
二、算法设计
2.1 问题分析
2.1.1题目
学生考勤系统
2.1.2功能要求
学生考勤系统应包含各班学生的全部信息,每个学生是一条记录,包括姓名,性别,学号,出勤情况等.
本系统可模拟考勤过程,记录考勤结果,并能够在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数.
2.2 需求分析
2.2.1 功能需求
为了解决人工操作在学生考勤中存在的不足,从学校管理人员能够更容易、更方便地使用
计算机对学生进行管理,以实现无纸化操作的方面进行分析。学生考勤管理系统能够提供学生考勤的情况记录,方便地对学生考勤进行评定。学生考勤管理系统应实现以下功能。
1.学生信息管理 添加学生基本信息,包括学生学号、姓名、性别、地址、所在班级等信息,修改学生基本信息,删除学生基本信息,查看学生基本信息。
2.学生考勤管理 包括出勤管理,请假管理。它们可以实现对学生日常主要考勤情况的记录管理。教师能够把学生的考勤情况输入到相应的数据库,也可对其进行添加、修改、删除。
3.查看成绩 学生查看所学课程的平时成绩的记录管理。
2.2.2 设计方案
此程序是过程性语言设计的。运用多种条件语句,主体采用的是链表指针。系统的设计采用了数组语句、选择语句和循环语句,在需要处理大量同类数据时,这样就使程序书写更加简洁。程序使用了布尔函数。选择语句多采用if多分支选择结构与switch语句。首先计算switch表达式,然后在caes子句中寻找值相等的常量表达式,并以此为入口符号,由此开始顺序执行。循环语句采用了 for语句等、do-while语句,for语句用于已知循环次数的循环结构,括号中的三个量分别用来表示循环变量初值、循环终值和循环增量。do-while语句先循环后判断, Break语句在switch语句中,保证多分支情况的正确执行,在循环语句中,强制终止本层循环。保存和读取函数是典型的函数功能,一个程序是由若干个函数组成的,保存和读取函数是和其他函数互相调用的。
该系统的设计本着简明扼要的原则设计开发的,有着人性化的提示界面与提示语句,结构完整有致,简单明了。
1. 设计考勤系统框架
2. 将框架分为三部分分别由小组三人完成
3. 设计考勤系统子系统:学生信息管理系统
4. 设计目录
5. 设计考勤算法‘
6. 将框架组合完成课设
2.2.3流程图
图2—1 系统流程图
三、程序及功能说明
3.1主要自定义函数分析
3.1.1select函数
功能说明:实现对目录的选择
流程图:
void select()
{
int m;
scanf("%d",&m);//输入要选择的数字
switch(m)
{
case 1: check();break;
case 2: manage();break;
case 3: calculate();break;
case 4: quit();break;
default: printf("输入错误!!请重新输入:\n");
}/*条件选择*/
}
3.1.2check函数
功能实现:此函数主要是学生签到功能的实现
流程图:
void check()
{
int i,n;
char no[30];
system("cls");//窗口清屏
printf("请输入学号:\n");
scanf("%s",no);//输入查找的学号
for(i=0;i<2;i++)
{
if(strcmp(no,stu[i].num)==0)//匹配学号
{
stu[i].th++;//考勤加一
printf("签到成功!\n");
printf("请输入考勤系统功能数字:\n");
n=5;//5赋给n
}
}
if(n!=5)//当没有匹配到学号时执行语句
printf("查无此人\n");
save();//保存
}
3.1.3manage函数
功能实现:对学生信息进行管理,添加,修改,查询等
流程图:
void manage()
{
int a,i=1;
system("cls");//清屏
printf("\n");
printf("\t\t*******************************************\n");
printf("\t\t\t 学生信息管理系统\n");
printf(" 1.添加学生信息\n");
printf(" 2.查询学生信息\n");
printf(" 3.修改学生信息\n");
printf(" 4.退出学生信息管理系统\n");
printf("\t\t*******************************************\n");
scanf("%d",&a);//输入数字
while(i!=0)//执行循环
{
if(a<=3&&a>=0)//如果a在0-3范围内
{
switch(a)
{
case 1: input(); break;
case 2: search(); break;
case 3: modify(); break;
}
printf("请输入信息管理功能数字:");
scanf("%d",&a);//输入数字
}
else
if(a==4)//如果a=4退出系统
{
system("cls");
break;
}
else
{
printf("输入错误!请重新输入:\n");
scanf("%d",&a);//输入数字
}
}
}
3.1.4modify函数
功能实现:对已经写入的学生信息进行修改。
流程图:
void modify()
{
int i,j,c;
char k[30];
FILE *fp;//定义文件指针
if((fp=fopen("stu.txt","rb"))==NULL)//如果文件打开失败
{
printf("cannot open file\n");
return ;//返回上级函数
}
printf("\n请输入要修改学生的学号:");
scanf("%s",k);//输入学号
for(i=0;i<2;i++)
{
fread(&stu[i],sizeof(struct student),1,fp);//文件读出
for(j=0;j<3;j++)//循环
{
if(strcmp(k,stu[i].num)==0)//学号匹配
c=i; //找到数据序号
fclose(fp);//文件关闭
}
}
printf("请输入新修改的内容:\n");
//下面输入该学生新信息
printf("请输入学生姓名:\n");
scanf("%s",stu[c].name);
printf("请输入学生学号:\n");
scanf("%d",stu[c].num);
printf("请输入学生性别(m:男生f:女生):\n");
scanf("%s",stu[c].sex);
save();//保存
}
3.1.5calculate函数
功能实现:通过对学生签到情况的统计,计算出学生的最终考勤成绩。
流程图:
void calculate()
{
int i;
system("cls");//清屏
printf("课程结束考勤评分如下\n");
for(i=0;i<2;i++)//循环
{
printf("学号:%s 姓名:%s 分数:%d",stu[i].num,stu[i].name,stu[i].th*25);//输出成绩 考勤次数*25
printf("\n");
}
printf("请输入考勤系统功能数字:\n\n");
}
四、结果分析
4.1运行结果
主目录
签到界面
学生信息管理目录界面
添加学生信息界面
查询学生信息界面
修改学生信息界面
考勤评定分数界面
退出考勤系统界面
五、总结及心得体会
此次c语言课程设计,在指导教师的精心教导下,我学会了如何用c语言编写一个简单的应用程序。首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。程序实现上,设计了简单的查询界面,将各个功能集中出来按照程序编写原则,便于查询。
经过一年对《c语言程序》的学习,我们都学到了不少东西,可能有一些人学的不够理想,但无论如何,这些知识都为我们的下一步学习打下了坚实的基础。做这样的一个课程设计,一方面是为了检验我们一学期的学习成果,另一方面也是为了让我们进一步掌握和运用它,同事也让我们认清自己的不足之处和薄弱环节,加以弥补加强。本程序在刚刚开始进行编写时,思路是很清晰的。但写完程序后,调试程序过程中发现有许多的错误,像在printf函数语句后面少加分号,if函数后面加上分号。或者一些变量定义错误。这些问题都是我平时学习马虎造成的。这些问题经过我多次的调试,已经成功解决。
我在编写此程序代码时,我学习到许多知识,这些知识有的在课本上难以学到的,像system(“cls”);清除屏幕函数。我在网络上查询资料以及请教同学,把自己所学习到的c语言知识综合在一起来进行运用,写出了此程序代码。最后,我总结了写程序的经验:一定要仔细。
参考文献
[1] 谭浩强.C语言程序设计教程.北京:高等教育出版社,2007.
[2] 曹哲主编.C语言实验与课程设计指导.北京:机械工业出版社,2010.
源程序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>/*包含头文件*/
/*****************************定义结构体*****************************/
struct student
{
char name[20];
char num[30];
char sex[2];
int th;
}stu[2];/*定义结构体数组*/
/***************************自定义函数声明***************************/
void menu();
void select();
void check();
void manage();
void input();
void save();
void search();
void modify();
void calculate();
void quit();
/******************************全局变量******************************/
FILE *fp;
/*******************************主函数*******************************/
main()
{
int i=1;
stu[0].th=0;//给th赋值
stu[1].th=0;//给th赋值
menu();
while(i!=0)
{
select();
if(i!='\n') menu();
}/*主函数中一直执行循环*/
}
/******************************目录函数******************************/
void menu()
{
printf("\t\t*******************************************\n");
printf("\t\t\t 欢迎使用学生考勤系统\n");
printf("\t\t\t 本科课程共计四节\n");
printf(" 1.学生每日签到\n");
printf(" 2.学生信息管理\n");
printf(" 3.考勤评定分数\n");
printf(" 4.退出考勤系统\n");
printf(" ☆☆☆☆☆请选择相应的数字☆☆☆☆☆\n");
printf("\t\t*******************************************\n");
}
/******************************选择函数******************************/
void select()
{
int m;
scanf("%d",&m);//输入要选择的数字
switch(m)
{
case 1: check();break;
case 2: manage();break;
case 3: calculate();break;
case 4: quit();break;
default: printf("输入错误!!请重新输入:\n");
}/*条件选择*/
}
/******************************签到函数******************************/
void check()
{
int i,n;
char no[30];
system("cls");//窗口清屏
printf("请输入学号:\n");
scanf("%s",no);//输入查找的学号
for(i=0;i<2;i++)
{
if(strcmp(no,stu[i].num)==0)//匹配学号
{
stu[i].th++;//考勤加一
printf("签到成功!\n");
printf("请输入考勤系统功能数字:\n");
n=5;//5赋给n
}
}
if(n!=5)//当没有匹配到学号时执行语句
printf("查无此人\n");
save();//保存
}
/****************************信息管理函数****************************/
void manage()
{
int a,i=1;
system("cls");//清屏
printf("\n");
printf("\t\t*******************************************\n");
printf("\t\t\t 学生信息管理系统\n");
printf(" 1.添加学生信息\n");
printf(" 2.查询学生信息\n");
printf(" 3.修改学生信息\n");
printf(" 4.退出学生信息管理系统\n");
printf("\t\t*******************************************\n");
scanf("%d",&a);//输入数字
while(i!=0)//执行循环
{
if(a<=3&&a>=0)//如果a在0-3范围内
{
switch(a)
{
case 1: input(); break;
case 2: search(); break;
case 3: modify(); break;
}
printf("请输入信息管理功能数字:");
scanf("%d",&a);//输入数字
}
else
if(a==4)//如果a=4退出系统
{
system("cls");
break;
}
else
{
printf("输入错误!请重新输入:\n");
scanf("%d",&a);//输入数字
}
}
}
/*****************************输入函数******************************/
void input()
{
int i;
for (i=0;i<2;i++)//循环
{
printf("请输入第%d学生姓名:\n",i+1);
scanf("%s",stu[i].name);
printf("请输入学生学号:\n");
scanf("%s",stu[i].num);
printf("请输入学生性别(m:男生f:女生):\n");
scanf("%s",stu[i].sex);/*输入信息*/
}
save();//保存
}
/********************************查询函数****************************/
void search()
{
int i,n;
char no[30];//定义数组
printf("请输入您要查找的学生学号:\n");
scanf("%s",no);//输入学号
for(i=0;i<2;i++)
{
if(strcmp(no,stu[i].num)==0)//匹配学号
{
printf("\n学生的信息为:姓名 学号 性别\n");
printf("学生基本信息:%-5s,%-5s,%-3s\n\n",stu[i].name,stu[i].num,stu[i].sex);//输出信息
n=5;//5赋给n
}
}
if(n!=5)//当学号匹配不到时执行
printf("查无此人\n");
}
/******************************保存函数******************************/
void save()
{
int i;
FILE *fp;//定义文件指针
if((fp=fopen("stu.txt","wb"))==NULL)//如果文件打开失败
{
printf("cannot open file\n");
return;//返回上级函数
}
for(i=0;i<2;i++)//循环
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)//如果写入失败
printf("file write error\n");
fclose(fp);//文件关闭
printf("已保存\n");
}
/*******************************修改函数*****************************/
void modify()
{
int i,j,c;
char k[30];
FILE *fp;//定义文件指针
if((fp=fopen("stu.txt","rb"))==NULL)//如果文件打开失败
{
printf("cannot open file\n");
return ;//返回上级函数
}
printf("\n请输入要修改学生的学号:");
scanf("%s",k);//输入学号
for(i=0;i<2;i++)
{
fread(&stu[i],sizeof(struct student),1,fp);//文件读出
for(j=0;j<3;j++)//循环
{
if(strcmp(k,stu[i].num)==0)//学号匹配
c=i; //找到数据序号
fclose(fp);//文件关闭
}
}
printf("请输入新修改的内容:\n");
//下面输入该学生新信息
printf("请输入学生姓名:\n");
scanf("%s",stu[c].name);
printf("请输入学生学号:\n");
scanf("%d",stu[c].num);
printf("请输入学生性别(m:男生f:女生):\n");
scanf("%s",stu[c].sex);
save();//保存
}
/****************************考勤评定函数****************************/
void calculate()
{
int i;
system("cls");//清屏
printf("课程结束考勤评分如下\n");
for(i=0;i<2;i++)//循环
{
printf("学号:%s 姓名:%s 分数:%d",stu[i].num,stu[i].name,stu[i].th*25);//输出成绩 考勤次数*25
printf("\n");
}
printf("请输入考勤系统功能数字:\n\n");
}
/******************************退出函数******************************/
void quit()
{ printf("\n");
printf("\n");
printf("\t\t\t\t谢谢使用本系统!\n");
printf("\t\t\t\t*****再见!****\n");
printf("\t\t ☆☆☆制作人:李鑫宇,谷维鑫,刘佳伟☆☆☆\n");
printf("\n");
exit(0);
}
- 23 -
展开阅读全文