前言
酒店前台找出了自己之前写过的作业,做一个项目的模板介绍。当时我的选题是:"研究生考勤系统",当时做的代码并不好,所以不要考究代码,看看一个完整的项目有哪些内容。
一,目录
首先是目录,一个上规格的目录可以让项目经理眼前一亮
二,介绍项目的创意和背景
介绍本作品的创意来源,产生背景,作品的主要功能,成果的应用目标等,介绍作品创作过程中的人员分工、设计制作进度安排等。
步入信息化时代,就跟电脑的普及一样,很多过去用纸来记录的文案工作都变成了用电脑进行操作,从而节约工作时间,提高工作效率。学生的考勤在过去一直是用纸张来记录的,用一份有日期区别的表格进行记录,用打勾表示到校。这样不仅很不方便,而且容易漏记,不好统计,还有不好保管的缺点。
因此,电脑系统上的考勤系统是很有必要的。
在新的电脑系统上,通过c程序,我们可以编写出具有相同功能的考勤系统,将相关考勤记录整理成电子文档,这样不仅能方便的显示出缺勤的学生,也能进行统计,统计学生的缺勤记录。
6月19日拟定相关方向后,在电脑系统上,通过c程序,编写出具有相同功能的考勤系统,将相关考勤记录整理成电子文档,这样不仅能方便的显示出缺勤的学生,也能进行统计,统计学生的缺勤记录。
6月20日整理了一份学生考勤名单,存储到了persona.txt文件里,用作C语言程序编写的数据源。
在咨询教师后,拟定以“学生名单一览”“教师端进行学生考勤”“学生的信息的删除,添加,查找”等功能进行系统开发,收集相关资料,进行程序编写。
教师考勤系统主要由教师进行查询,考勤,确认,也可以找出特定学生的信息,功能于6月20日逐渐完善。
预计于6月21日前完成所有报告的编写。
三,总体设计
对系统实现的功能、开发技术和应用环境进行介绍
教师登录系统后,能用本系统进行学生的考勤,并能执行学生名单一览,添加、修改、查找、删除学生信息等复杂功能。学生的缺勤或事假信息可从外部persona.txt文件导入。
6个功能通过输入相应数字来开启
在主界面输入用户是学生还是老师,如果是老师,输入密码,例如1101,输入所教课程。
。
输入1进行学生名单一览。
之后系统会回到主界面,教师可以输入0退出系统,也可以输入其它数字。
输入2开始学生考勤
教师逐个确认学生是否缺勤,缺勤学生输入1,错误系统会给出提示。所有学生确认完毕后,系统会统计缺勤学生的数目进行再一次确认。
添加,删除,修改等操作同上。
四,介绍系统开发平台
介绍系统开发所使用的软件和硬件环境,包括所用到的开源平台、第三方工具。
给出使用操作系统的名称、生产厂家、版本号等。
给出所用开源平台的官方网站、版本,该平台提供的功能。如关键算法的实现或部分实现调用了第三方工具或源代码,请标出其出处,写明已实现的功能。
如果使用了数据库,需给出使用数据库的名称、生产厂家、版本号等。如使用了多种数据库,则要说明如何实现相互之间的关联。
给出使用的硬件设备,型号、生产厂家等。
-
- 系统软硬件平台
- 系统开发平台(含开源/第三方工具)
- 系统软硬件平台
使用了dev-c++,在
构建了结构体来存储学生信息数据
建立了read函数来从外部persona.txt读取学生数据
Windows10,如联想的个人笔记本电脑。
从外部读取数据文件
利用指针进行循环输出
进行学生考勤并统计缺勤人数
教师登录的密码确认。
系统主界面如图
五.详细设计
对系统或子系统实现方法进行详细说明。
给出系统开发的功能模块结构图,并说明系统按照什么原理进行划分,系统将由哪些部分,或层次组成。
用图的形式将各个模块之间的调用关系说明清楚。如果采用面向过程的开发技术,给出主要的函数结构和调用关系图;如果采用面向对象的方法进行设计,模块调用关系图相当于包(package )图
模块化,采用了dev-c++进行了开发,这是面向学生的较易操作的系统平台。
在主函数中,将相应的功能分成6个模块,其中每个模块对应一个功能:学生名单一览,考勤,添加、修改、删除、添加学生信息。
函数 | 功能 | ||
int main() | 主函数 | ||
Int read() | 从外部读取数据 | ||
Void printlist() | 展示学生名单 | ||
Int kaoqing() | 进行学生考勤 | ||
Void save() | 添加学生信息 | ||
Void del | 删除学生信息 | ||
Void xiugai | 修改学生信息 |
- 读取外部文件的函数 int read(),读取persona.txt文件,若失败,输出文件无法打开。
- 展示学生名单的子函数void printlist()
- 对教师密码进行确认的子函数。
- 进行学生考勤的子函数,输入数字2,系统会根据学生名单循环输出,教师进行确认
4添加学生信息的子函数,输入学生的学号,姓名,缺勤次数,系统进行保存。但要符合输入规则。
5.查找,删除,修改的基本规则同上,但多了一个查找函数,若教师输入的信息不在学生名单里,系统输出查无此人。
-
-
- 关键功能/算法设计
-
外部数据的读写,
学生名单的循环输出,采用了指针变量
主要功能:循环输出学生名单并进行缺勤统计。
结构体 struct student persona
数组 int a【】
文件 persona.txt
【
1. 数据库
文件信息存储在persona.txt文件中,每次打开程序读取。
采用了结构体数据类型(数组,字符,数组)
应用了#include等函数
2. 文件存储
存储到外部persona.txt文件中每次读取用read()函数读取。
-
-
- 接口(模块接口、系统间接口)
-
C语言程序一般数据,从外部persona.txt文件读写,在内部进行运算。
各个子函数在主函数中被调用。
-
-
- 关键数据结构
-
采用了结构体数据类型进行数据的存储,保存到外部文件persona.txt中,
在部分循环中采用了指针变量,并定义了字符串用以输入输出。
一般的c语言程序输出界面
教师登录系统后,输入数字执行各个功能。功能执行完毕后又会回到主界面,直到教师输入
进入主要界面,教师有6个功能选择。输入数字1会显示学生名单。
然后系统会回到主界面,直到教师输入0退出系统。
如果教师开始考勤,在主界面输入数字2
学生名字会显示在屏幕上,教师逐一确认,缺勤输入数字1,错误系统会给出提示。
全部学生确认完毕后,系统会统计缺勤总人数:
添加学生信息按3
输入学生的学号 姓名 缺勤次数,系统会计入并给出回应,回到主界面。
删除,查找,修改同上。
最后教师在主界面输入0退出系统。
六,系统安装及使用说明
进入主要界面,教师有6个功能选择。输入数字1会显示学生名单。
然后系统会回到主界面,直到教师输入0退出系统。
如果教师开始考勤,在主界面输入数字2
学生名字会显示在屏幕上,教师逐一确认,缺勤输入数字1,错误系统会给出提示。
全部学生确认完毕后,系统会统计缺勤总人数:
添加学生信息按3
输入学生的学号 姓名 缺勤次数,系统会计入并给出回应,回到主界面。
删除,查找,修改同上。
最后教师在主界面输入0退出系统。
七,总结
步入信息化时代,就跟电脑的普及一样,很多过去用纸来记录的文案工作都变成了用电脑进行操作,从而节约工作时间,提高工作效率。学生的考勤在过去一直是用纸张来记录的,用一份有日期区别的表格进行记录,用打勾表示到校。这样不仅很不方便,而且容易漏记,不好统计,还有不好保管的缺点。
因此,电脑系统上的考勤系统是很有必要的。
在新的电脑系统上,通过c程序,我们可以编写出具有相同功能的考勤系统,将相关考勤记录整理成电子文档,这样不仅能方便的显示出缺勤的学生,也能进行统计,统计学生的缺勤记录。在读写外部文件上,查找了教科书,通过子函数的方式,实现了外部文件的读写,这也是一大突破。利用c语言编写的电脑考勤系统,有多种功能可供用户选择,用户可根据自己的需要进行操作,系统有以下功能:
1.列出全体学生名单。
2.进行考勤,统计未到的学生人数。
3增加学生信息
4.删除学生信息
5.修改学生信息
6.查找学生信息
通过电脑系统进行考勤,可以极大简化工作流程。方便各位教学人员的工作。面向广大教师群体,程序尽量编写得简单易懂。
八,附录
名词/缩写 | 说明 |
[1] 《程序设计方法与技术—c语言》
#include <stdio.h>
#include <stdlib.h>
//总共有6个功能:学生名单展示;考勤;添加、删除、修改、查找学生信息。
//定义结构体数组
struct student
{ int num;
char name[20];
int times;};
//读取数据的子函数
int read(struct student persona[])
{ FILE*fp;
int n=0;
if((fp=fopen("persona.txt","r"))==NULL)
{ printf("文件无法打开\n");
exit(0);
}
while(!feof(fp))
{ fscanf(fp,"%d%s%d",&persona[n].num,&persona[n].name,&persona[n].times);
n++;}
fclose(fp);
return n;
}
//1.学生名单一览的子函数
void printlist(struct student persona[],int n)
{ int i;
struct student *p;
printf("学号 姓名 缺勤次数\n");
for(p=persona;p<persona+n;p++)
printf("%d %s %d\n",p->num,p->name,p->times);
}
//2考勤的子函数
int kaoqing(struct student persona[],int n)
{ struct student
{ int num;
char name[20];
};
struct student persona5[n];
int i=0,flag,j=0,k=0;
for (i=0;i<n;i++)
{ printf(" \n%d %s ",persona[i].num,persona[i].name);
puts("\n是否缺勤?\n缺勤输入数字1,到校输入数字2\n");
scanf("%d",&flag);
if(flag==1)
{persona5[j].num=persona[i].num;
strcpy(persona5[j].name,persona[i].name);
j++;
printf("---------------");
printf("\n %s缺勤已记录。\n\n",persona[i].name);
printf("--------------\n\n");
}
else if(flag!=2)
{printf("输入错误\n");
i--;}
else
{printf("---------------");
printf("\n %s到校已记录。\n\n",persona[i].name);
printf("--------------\n\n");}}
if(j>0)
{printf("以下为缺勤学生\n");
for(k=0;k<j;k++)
printf("%d %s \n",persona5[k].num,persona5[k].name);
}
system("pause");
}
//3添加学生信息的子函数
void save()
{
struct student
{ int num;
char name[20];
int times;};
struct student persona5[1];
int i=0;
printf("输入要添加的学生的学号(数字)+空格+姓名(字符)+空格+缺勤次数(数字)\n" );
scanf("%d %s %d",&persona5[i].num,persona5[i].name,&persona5[i].times);
printf("输入完毕\n") ;
printf("学号 姓名 缺勤次数\n");
printf("%d %s %d\n已记录\n\n",persona5[i].num,persona5[i].name,persona5[i].times);
}
//4.删除学生信息的子函数
void del(struct student persona[],int n)
{
int i=0,flag=0,j=0;
int num;
char name;
printf("输入要删除的学生的学号(数字)+空格+姓名(字符)\n" );
scanf("%d %c ",&num,&name);
for(i=0;i<n;i++)
{
if(persona[i].num==num)
{flag=1;j=i;break;}
else
flag=0;
}
if(flag==1)
{printf("学号 姓名 缺勤次数\n\n");
printf("%d %s %d\n已删除\n\n\n",persona[j].num,persona[j].name,persona[j].times);}
else
printf("未找到此学生\n") ;
printlist(persona,n);
system("pause");
}
//5修改学生信息的子函数
void xiugai(struct student persona[],int n)
{
int i=0,flag=0,j=0,times;
int num;
char name;
printf("输入要修改的学生的学号(数字)+空格+姓名(字符)\n" );
scanf("%d %c ",&num,&name);
for(i=0;i<n;i++)
{
if(persona[i].num==num)
{flag=1;j=i;break;}
}
if(flag==1)
{printf("输入修改后的缺勤次数\n\n");
scanf("%d",×);
printf("学号 姓名 缺勤次数 \n");
printf("%d %s %d\n已修改\n\n\n",persona[j].num,persona[j].name,times);}
else
printf("查无此人\n") ;
printlist(persona,n);
system("pause");
}
//6.查找学生信息的子函数
void chazao(struct student persona[],int n)
{
int i=0,flag=0,j=0,times;
int num;
char name;
printf("输入要查找的学生的学号(数字)+空格+姓名(字符)\n" );
scanf("%d %c ",&num,&name);
for(i=0;i<n;i++)
{
if(persona[i].num==num)
{flag=1;j=i;break;}
else
flag=0;
}
if(flag==1)
{
printf("学号 姓名 缺勤次数 \n");
printf("%d %s %d\n已找到\n\n\n",persona[j].num,persona[j].name,persona[j].times);}
else
printf("未找到此学生\n学生名单如下\n") ;
printlist(persona,n);
}
//主函数
int main()
{ int i;
struct student persona[12];
int n,choice=1;
n=read(persona);
printf("学生名单如下:\n");
printlist(persona,n);
while(choice!=0)
{
printf("\n\n\n\n\n 教师考勤系统\n");
printf("--------------------------------------\n");
printf(" 1.学生名单一览\n");
printf(" 2.开始考勤\n");
printf(" 3.添加学生信息\n");
printf(" 4.删除学生信息\n");
printf(" 5.修改学生信息\n");
printf(" 6.查找学生信息\n");
printf(" 0.退出系统\n");
printf("-----------------------------------------\n");
printf("请输入您的选择【0-5】\n");
scanf("%d",&i);
switch(i)
{ case 1:printf("\n学生信息如下\n");printlist(persona,n);break;
case 2:printf("\n按学号顺序开始考勤\n");kaoqing(persona,n);break;
case 3:printf("\n添加学生信息 \n");save();break;
case 4:printf("\n删除学生信息 \n ");del(persona,n);break;
case 5:printf("\n修改学生信息 \n ");xiugai(persona,n);break;
case 6:printf("\n查找学生信息 \n ");chazao(persona,n);break;
case 0:break;
default:printf("输入序号有误\n");break;
}
printf("按0退出教师考勤系统,其他键继续使用\n");
scanf("%d",&choice)
}
system("pause");
return 0;}
九,说在后面的话
以上的模板对于完成一个项目设计是很完整了。选题是“研究生考勤系统”,当时是一串烂代码,硬着头皮凑字数,笑。希望对大家的实际项目设计有所帮助。
我的其他专栏:
关注我了解更多