资源描述
. .
《程序设计》
课程设计说明书
课程名称《程序设计》
设计题目C语言课程设计学生考勤系统
专业班级
学生XX
指导教师
起止日期2013年6月8日至2013年6月14日
XX林业职业技术学院自动化工系
目录
第1章 设计目的……………………….
第2章 总体设计…………………………
第3章 详细设计…………………………
第4章 调试与测试………………………
第5章 总结与体会………………………
附:源程序清单和执行结果……………………………..
第1章设计目的
本次C语言课程设计是对本学期程序设计基础课程的实际应用,也算是对所学知识的一次检验,通过本次课程设计能达到的目的如下:
1.巩固和加深对C课程基本内容和理论知识的理解和掌握。
2.掌握C语言编译和程序调试的基本技能。
3.利用C语言进行基本的程序设计从而逐步了解文件的一些相关操作和掌握函数的使用技巧,包括函数类型的选择,含参数的传递方式。
4.掌握使用数组,指针,引用,文件等编译的方法,提高运用C语言解决实际问题的能力。
5.通过对学生考勤系统的设计、编写源代码,以及对C语言中各个语法和函数的使用,使得对比较复杂的结构体、、文件的操作更加熟悉。
6.通过课程设计,将本学期所学知识与实际应用联系和结合起来,培养自己的动手能力,以及加强各学科之间的联系,从而提高个人的团队意识,增强团队之间协调和配合
第2章总体设计
2.1学生考勤信息记录系统的要求
通过该系统实现对学生考勤信息进行创建、录入、修改、查询、保存等操作的管理。
实验考勤信息包括学生XX,学号,学科种类,各科的考勤信息。
主要功能:
1)、能够完成对考勤的录入和修改
2)、创建一个班级的信息
3)、设备的查询
4)、将考勤信息保存到文件中
2.2流程图
根据设计要求,画出如下流程图:
开 始
菜 单2
4.
修改
6.退出
5.查询2
3.创建
2.查询
1
1.录入
结 束
2.3设置的主要函数
void creat(void);
void save(struct Student *,char []);
struct Student *load(char []);
void enter(void); /*录入函数*/
void search_1(void); /*查询函数_1*/
void search_2(void); /*查询函数_2*/
void add(void);
void modify(void); /*修改函数*/
void back(void); /*退出函数*/
void mune_1(); /*界面-1*/
void mune_2(); /*界面-2*/
mune_1();
mune_2();
第3章详细设计
3.1函数以及调用关系
void mune_1(); /*菜单函数1*/
void mune_2() /*菜单函数2*/
开始
录入记录
查询个人
创建信息
修改信息
查询
整班
结束
Menu_2
退出系统
1 2 3 4 5 6
Break Break Break Break Break break
void enter(void); /*录入函数*/
开始
输入班级和学生学号
p->num==a
大学体育
大学口语
C语言
大学物理
马克思
大学英语
高等数学
输入学生本节课息
y/n
②
返回菜单2
n
退出
开始
void search_1(void); /*查询个人信息*/
输入此人所在班级和学号a
p->num==a
真假
输出此人的考勤信息
返回菜单2
开始
void search_2(void); /*查询班级信息*/
输入要查询的班别
输出此班的考勤信息
返回菜单2
void modify(void); /*修改函数*/
开始
输入你要修改的班级和座位号a
p->num==a
真假
重新输入这位学生的考勤信息
返回菜单2
void save(struct Student *,char []);退出
关闭文件
开始
打开文件
数据写入文件
struct Student *load(char filename[])
开始
关闭文件
读出数据
打开文件
退 出
3.2结构的应用
If…else结构和 while 结构嵌套结构:
while(p1->num!=0)
{
n=n+1;
if(n==1)
head=p1;
else p2->next=p1;
p2=p1;
p1=(struct Student *)malloc(LEN);
scanf("%s%d%s",p1->name,&p1->num,p1->sex);
p1->math=p1->English=p1->physics=p1->Mks=p1->C=p1->teal=p1->PE=0;
}
p2->next=NULL;
p=head;
while(p!=NULL)
{
fwrite(p,LEN,1,fp);
p=p->next;
}
fclose(fp);
printf("\t\t\t创建成功,按任意键返回主菜单\n");
getch();
system("cls");
mune_2();
2 switch结构
switch(sub)
{
case 1: {p->math+=num;}break;
case 2: {p->English+=num;}break;
case 3: {p->physics+=num;}break;
case 4: {p->Mks+=num;}break;
case 5: {p->C+=num;}break;
case 6: {p->teal+=num;}break;
case 7: {p->PE+=num;}break;
}
3while结构
while(p!=NULL)
{
if(p->num==a)
{
printf("\n\t\t请重新输入高等数学缺勤节数:");
scanf("%d",&p->math);
printf("\n\t\t请重新输入大学英语缺勤节数:");
scanf("%d",&p->English);
printf("\n\t\t请输入大学物理缺勤节数:");
scanf("%d",&p->physics);
printf("\n\t\t请重新输入马克思主义基本原理与概论缺勤节数:");
scanf("%d",&p->Mks);
printf("\n\t\t请重新输入C语言缺勤节数:");
scanf("%d",&p->C);
printf("\n\t\t请重新输入英语口语缺勤节数:");
scanf("%d",&p->teal);
printf("\n\t\t请重新输入体育缺勤节数目:");
scanf("%d",&p->PE);
flag=1;
save(head,cla);
printf("\n\t\t修改成功!\n\t\t");
break;
}
p=p->next;
}
第4章调试与测试
4.1调试
执行程序时,显示如下信息
选择不同的选项,执行相应的功能。
(选择3),创建一个班级的基本信息。
(选择1),录入本次课考勤情况。
选择要修改的科目的界面:
输入缺勤同学和缺勤节数:
结束输入则输入n后返回菜单2:
(选择2),查询学生个人考勤信息。
(选择4),修改学生个人考勤信息。
(选择5),查看一个班级的考勤信息。
(选择6),退出学生考勤信息系统。
第5章总结与体会
三周的课程设计已经结束了。
回想学习C语言的过程中,既有快乐又有烦恼。
从领到书的那一刻,我就很郁闷,《C 语言程序设计》到底事学什么的,有什么用。刚开始上课时,还在迷茫这门课程是用来做什么的。不过,这些感受都是在对这门课程不了解的情况下产生的。后来慢慢的接触多了,听老师讲的多了,了解多了,渐渐的产生了兴趣。尤其是学到语句和函数时,上机操作程序,经过编译,调试和运行后,出现界面,当时觉得很好奇,想真正的学好这门课程。通过半个学期的学习,我掌握了基本知识。
下学期开始时,被通知要进行课程设计。当时有点懵,感觉学的东西很少,很零散,不知该怎么连到一起,就要课程设计,是不是太难为我们了。
第一天基本上都是在看书,把基本知识再熟悉一遍。到了下午的时候,看了很多练习题,从这些练习题上我得到了不少启发,然后我们组把整个程序的思路理清了,开始着手写程序。
第一周结束的时候,我感觉自己收获挺大的,从一开始的迷茫,不知道从何下手到把程序中的几个模块编写出来,心里挺开心的。但是,接下来,我们又不得不再次陷入困境。在整个程序的编写过程中,最难的就是修改和删除这两个模块,这也是我们要解决的重点问题。
开始编写修改和删除时,很头疼,去向其他人寻求帮助,在别人的帮助和提示下,我编完了修改程序,但编译时老出错,修改后的内容将文本内的信息全部覆盖了。困难之时,我们组的其他人,帮助了我,完成了修改和删除,这让我认识到团队的力量。这样的话,整个程序基本上全部完成了,就剩下完善工作了。我们组写了两个程序,最后,两个程序相互组合,互补,大功告成
虽然设计时完成了,但是我觉得其中还是有一些不足之处:
1. 警告句。程序中缺少一些警告句,例如:“是否真的删除(y/n)?”。
2. 重名的情况。由于考虑的不周全,没有设计遇到重名的情况该怎么处理。
3. 选择单一。我们设计的程序中,只设计了按名字选择,进行操作,忽略了重名的情况。
整个程序完成了,还有很多不完善的地方,希望自己以后办事的时候要认真,仔细,考虑周全。
短短的几周课程设计结束了,但是这段时间里,我又学到了更多C 知识,如:对象数组,string类,文件流,链表以及文件对链表的操作等,同时我也被提醒以后办事的时候要认真,仔细,考虑周全,也看到了团队精神和互帮互助的重要性。这一点会让我终生受益。通过这次课程设计,我觉得自己肚子里的墨水多了,收获也挺大的,这几周过的挺充实!
*附:源程序清单和执行结果
#include<stdio.h>
#include<stdlib.h>
#include <conio.h>
#include<string.h>
#define LEN sizeof(struct Student)
struct Student
{
int num;
char name[15];
char sex[4];
int math, English,physics,Mks,C,teal,PE;
struct Student *next;
};
int n;
void main()
{
void creat(void);
void save(struct Student *,char []);
struct Student *load(char []);
void enter(void); /*录入函数*/
void search_1(void); /*查询函数_1*/
void search_2(void); /*查询函数_2*/
void modify(void); /*修改函数*/
void back(void); /*退出函数*/
void mune_1(); /*界面-1*/
void mune_2(); /*界面-2*/
mune_1();
mune_2();
printf("\n");
}
void mune_1()
{
printf("\n\n\n\n\n\n");
printf("\t************************************************************");
printf("\t\t\t ********** ********** ");
printf("\t\t\t◇******** 欢迎使用班级考勤系统 ********◇");
printf("\t\t\t ********** ********** ");
printf("\n\t************************************************************\n\n\n");
printf("================================================================================");
printf("\n\n\n\t\t\t\t<按任意键进入>\n\t\t\t\t\t");
getch();
system("cls");
}
void mune_2()
{
int option,ch; /*定义一个选项的数据类型*/
printf("\n\n\n"); /*制作的一个漂亮的选择界面*/
printf("\t***************************************************************\n");
printf("\t*\t\t\t\t\t\t\t *\n");
printf("\t*\t\t\t\t\t\t\t *\n");
printf("\t* 1、录入本次课考勤情况\t 2、查询学生考勤信息\t *\n");
printf("\t*\t\t\t\t\t\t\t *\n");
printf("\t* 3、创建学生信息\t\t 4、修改学生信息\t *\n");
printf("\t*\t\t\t\t\t\t\t *\n");
printf("\t* 5、查看班级考勤情况 \t 6、退出考勤系统\t *\n");
printf("\t*\t\t\t\t\t\t\t *\n");
printf("\t*\t\t\t\t\t\t\t *\n");
printf("\t***************************************************************\n");
printf("\n");
printf("\t\t\t请输入您所需的操作(1~6):\n\t\t\t\t");
while(1)
{
scanf("%d",&option);
switch(option)
{
case 1: {ch=getchar();system("cls");enter();}break;
case 2: {ch=getchar();system("cls");search_1();}break;
case 3: {ch=getchar();system("cls");creat();}break;
case 4: {ch=getchar();system("cls");modify();}break;
case 5: {ch=getchar();system("cls");search_2();}break;
case 6: {ch=getchar();system("cls");back();}break;
default: printf("\t\t\t输入错误,请重新输入!!!");
}
printf("\n\t\t\t\t");
}
ch=getchar();
}
void save(struct Student *head,char filename[])
{
FILE *fp;
struct Student *p=head;
if((fp=fopen(filename,"wb"))==NULL)
{
printf("can not open file\n");
exit(0);
}
while(p!=NULL)
{
fwrite(p,LEN,1,fp);
p=p->next;
}
fclose(fp);
}
struct Student *load(char filename[])
{
FILE *fp;
struct Student *head,*p1,*p2;
head=NULL;
p1=NULL;
if((fp=fopen(filename,"rb"))==NULL)
{
printf("can not open file\n");
exit(0);
}
while(!feof(fp))
{
p2=(struct Student *)malloc(LEN);
if(fread(p2,LEN,1,fp)==1)
{
if(head==NULL)
head=p2;
if(p1)
p1->next=p2;
p1=p2;
}
}
p1->next=NULL;
return (head);
}
void enter() /*录入函数*/
{
struct Student *head,*p;
char select='y',cla[10];
int sub,stu,num,flag=0;
printf("请输入上课班级:");
scanf("%s",cla);
strcat(cla,".dat");
p=head=load(cla);
system("cls");
while(select=='y'||select=='Y')
{
printf("\n\n\n");
printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\t*\t\t\t\t\t\t\t *\n");
printf("\t*\t\t\t\t\t\t\t *\n");
printf("\t* 1、高等数学\t\t 2、大学英语\t\t *\n");
printf("\t*\t\t\t\t\t\t\t *\n");
printf("\t* 3、大学物理\t\t 4、马克思基本原理概论 *\n");
printf("\t*\t\t\t\t\t\t\t *\n");
printf("\t* 5、C程序设计基础 \t 6、教师口语\t\t *\n");
printf("\t*\t\t\t\t\t\t\t *\n");
printf("\t* 7、体育\t\t\t\t\t\t *\n");
printf("\t*\t\t\t\t\t\t\t *\n");
printf("\t*\t\t\t\t\t\t\t *\n");
printf("\t* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\n");
printf("\t\t\t请输入科目选项(1~7):\n\t\t\t\t");
scanf("%d",&sub);
while(1)
{
if(sub>0&&sub<8)
break;
else
printf("\t\t\t输入错误,请重新输入\n\t\t\t\t");
scanf("%d",&sub);
}
system("cls");
printf("请输入本次课缺席同学的座号:");
scanf("%d",&stu);
printf("\n");
printf("请输入该同学的缺课节数:");
scanf("%d",&num);
while(p!=NULL)
{
if(p->num==stu)
switch(sub)
{
case 1: {p->math+=num;}break;
case 2: {p->English+=num;}break;
case 3: {p->physics+=num;}break;
case 4: {p->Mks+=num;}break;
case 5: {p->C+=num;}break;
case 6: {p->teal+=num;}break;
case 7: {p->PE+=num;}break;
}
p=p->next;
}
printf("\n\n\t\t******输入成功******!!!\n");
printf("是否继续输入(y\\n):");
scanf("%c",&select);
}
save(head,cla);
getch();
system("cls");
mune_2();
}
void search_1(void) /*查询个人信息*/
{
struct Student *head,*p;
char select='y',cla[10];
int num,flag=0;
printf("请输入上课班级:");
scanf("%s",cla);
strcat(cla,".dat");
p=head=load(cla);
printf("请输入要查询同学的座号:");
scanf("%d",&num);
system("cls");
while(p!=NULL)
{
if(p->num==num)
{
printf("\n\n");
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" 座号性别数学英语物理马克思 C语言教师口语体育\n");
printf(" %3d %8s %4s%5d %5d %5d %5d %3d %7d %8d\n",p->num,p->name,p->sex,
p->math,p->English,p->physics,p->Mks,p->C,p->teal,p->PE);
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
flag=1;
}
p=p->next;
}
if(flag==0)
printf("\t\t!!!没有这个学生信息,请核对后再输入!!!\n\n");
getch();
system("cls");
mune_2();
}
void search_2(void) /*查询某班级信息*/
{
char cla[10];
struct Student *head,*p;
printf("请输入您要查询的班级名:");
gets(cla);
system("cls");
printf("\n \t\t\t%s班的考勤情况\n\n",cla);
strcat(cla,".dat");
p=head=load(cla);
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" 座号性别数学英语物理马克思 C语言教师口语体育\n");
while(p!=NULL)
{
printf(" %3d %8s %4s%5d %5d %5d %5d %3d %7d %8d\n",p->num,p->name,p->sex,
p->math,p->English,p->physics,p->Mks,p->C,p->teal,p->PE);
p=p->next;
}
printf("\n* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
getch();
system("cls");
mune_2();
}
void modify(void) /*修改函数*/
{
int a,flag=0;
char cla[10];
struct Student *head,*p;
printf("\n\t\t请输入要修改的班级:");
scanf("%s",cla);
strcat(cla,".dat");
p=head=load(cla);
printf("\n\t\t请输入要修改的学生的座号:");
scanf("%d",&a);
while(p!=NULL)
{
if(p->num==a)
{
printf("\n\t\t请重新输入高等数学缺勤节数:");
scanf("%d",&p->math);
printf("\n\t\t请重新输入大学英语缺勤节数:");
scanf("%d",&p->English);
printf("\n\t\t请输入大学物理缺勤节数:");
scanf("%d",&p->physics);
printf("\n\t\t请重新输入马克思主义基本原理与概论缺勤节数:");
scanf("%d",&p->Mks);
printf("\n\t\t请重新输入C语言缺勤节数:");
scanf("%d",&p->C);
printf("\n\t\t请重新输入英语口语缺勤节数:");
scanf("%d",&p->teal);
printf("\n\t\t请重新输入体育缺勤节数目:");
scanf("%d",&p->PE);
flag=1;
save(head,cla);
printf("\n\t\t修改成功!\n\t\t");
break;
}
p=p->next;
}
if(flag==0)
{
printf("\t\t!!!没有这个学生信息,请核对后再输入!!!\n\n");
}
getch();
system("cls");
mune_2();
}
void creat(void) /*创建函数*/
{
FILE *fp;
struct Student *head,*p,*p1,*p2;
char filename[10];
n=0;
p1=p2=(struct Student *)malloc(LEN);
printf("请输入你要创建班级的名称(如果要创建的文件已存在,将覆盖原文件):");
gets(filename);
strcat(filename,".dat");
if((fp=fopen(filename,"wb"))==NULL)
{
printf("can not open file\n");
exit(0);
}
printf("请输入学生的基本信息:、座号、性别\n");
scanf("%s%d%s",p1->name,&p1->num,p1->sex);
p1->math=p1->English=p1->physics=p1->Mks=p1->C=p1->teal=p1->PE=0;
head=NULL;
while(p1->num!=0)
{
n=n+1;
if(n==1)
head=p1;
else p2->next=p1;
p2=p1;
p1=(struct Student *)malloc(LEN);
scanf("%s%d%s",p1->name,&p1->num,p1->sex);
p1->math=p1->English=p1->physics=p1->Mks=p1->C=p1->teal=p1->PE=0;
}
p2->next=NULL;
p=head;
while(p!=NULL)
{
fwrite(p,LEN,1,fp);
p=p->next;
}
fclose(fp);
printf("\t\t\t创建成功,按任意键返回主菜单\n");
getch();
system("cls");
mune_2();
}
void back(void) /*退出函数*/
{
printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t感谢您的使用~\n\t\t\t\t ");
getch();
exit(0);
}
. .word..
展开阅读全文