c语言课程设计报告Word下载.docx
《c语言课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告Word下载.docx(74页珍藏版)》请在冰豆网上搜索。
一、课程设计目的
通过实践,学会编制结构清晰、风格良好、数据结构适当的C语言程序,加深对C语言基础知识的理解和掌握,进一步巩固C语言编程实践能力,锻炼思维逻辑和解决综合性实际问题的能力。
二、实习内容及要求
1、用C语言编写一个学生证管理系统,该系统具有以下功能:
(1)录入某位学生的学生证信息;
(2)给定学号,显示某位学生的学生证信息;
(3)给定某个班级的班号,显示该班所有学生的学生证信息;
(4)给定某位学生的学号,修改该学生的学生证信息;
(5)给定某位学生的学号,删除该学生的学生证信息;
(6)提供一些统计各类信息的功能;
(7)提供浏览所有学生的学生证信息的功能。
2、输入要求
应用程序运行后,在屏幕上显示一个菜单;
用户可以根据要求,选定相应的操作项目;
进入某个操作后,根据应用程序的提示,从键盘输入相应的信息。
3、输出要求
(1)应用程序运行后,要在屏幕上显示一个菜单;
(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式
及结束方式等。
三、需求分析
根据题目要求,学生信息要从文本文件中存取,所以本程序应该提供读写文件,显示、
统计、查询、修改记录,保存文件等操作,此外,还应该提供键盘式选择菜单实现功能。
四、总体设计
根据需求分析,可以把这个系统的设计分为添加、修改、查询、浏览、统计、删除六大
模块,其中查询模块可以分为三个子模块,统计模块可以分为三个子模块,子模块下面还有子
函数;
系统功能模块图如下所示:
五、详细设计
5.0头文件及结构体
#include<
stdio.h>
stdlib.h>
string.h>
#defineN100
structClass//班级
{
charCname[20];
//班名
charCno[20];
//班号
};
structStudent//学生
charSname[20];
//姓名
charSex[10];
//性别
charSno[20];
//学号
intAge;
//年龄
structClassCInfo;
//嵌套结构体,表示班级信息
}StuInfo[N];
//结构体数组,用作读取和存放临时数据
5.1主函数
voidmain()
menu();
//菜单
getchar();
}
5.2菜单
voidmenu()
intchose;
intright;
do
{
printf("
\n\t\t\t\t学生证管理系统\n"
);
·
"
菜单:
\t1-添加\t2-修改\t3-浏览全部\t4-查询\t5-统计\t6-删除\t7-退出\n"
请输入数字选择:
scanf("
%d"
&
chose);
if(chose<
1||chose>
8)
right=1;
输入错误,请重新输入!
\n"
}
elseright=0;
}while(right==1);
switch(chose)
case1:
add();
break;
//添加模块
case2:
modify();
//修改模块
case3:
browse();
//浏览模块
case4:
quiry();
break;
//查询模块
case5:
stastic();
//统计模块
case6:
Delete();
//删除模块
case7:
exit(0);
//退出
}
5.3添加模块
首先要判断文件StuInfo.txt是否存在,如果存在就以读写(r+)的方式打开,如果不存在,就以写(w)的方式创建文件StuInfo.txt。
输入格式要求:
性别为男或女,学号为11位且不能重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。
此外,如果以读写的方式打开,还要判断记录数num<
N是否成立,因为结构体数组的大小为N,当num=N时,表示已满,不能再存储数据,需要修改N的值。
voidadd()
intnum;
//表示记录数
inti;
intage;
//临时变量,用于验证输入的性别是否满足条件
charsno[20];
//临时变量,用于验证输入的学号是否满足条件
charsex[20];
charcno[20];
//临时变量,用于验证输入的班号是否满足条件
FILE*fp;
if((fp=fopen("
StuInfo.txt"
"
r+"
))==NULL)//以读写方式打开
w"
))==NULL)//文件不存在就创建文件
\n文件不存在且创建失败,返回!
\n请按照提示输入学生信息:
\n\n"
姓名:
%s"
StuInfo[0].Sname);
\n性别(男或女):
sex);
if((strcmp(sex,"
男"
)!
=0)&
&
(strcmp(sex,"
女"
=0))
{
输入错误,请输入男或女!
right=1;
getchar();
strcpy(StuInfo[0].Sex,sex);
\n学号(11位):
sno);
if(strlen(sno)!
=11)
输入错误,学号长度应为11位数!
strcpy(StuInfo[0].Sno,sno);
\n年龄:
age);
if(age<
=0||age>
100)
年龄应在0-100之间,请重新输入年龄!
StuInfo[0].Age=age;
\n班号(6位):
cno);
if(strlen(cno)!
=6)
输入错误,班号长度应为6位数!
strcpy(StuInfo[0].CInfo.Cno,cno);
\n班名:
StuInfo[0].CInfo.Cname);
fprintf(fp,"
\n%s\t%s\t%s\t%d\t%s\t%s"
StuInfo[0].Sname,StuInfo[0].Sex,StuInfo[0].Sno,StuInfo[0].Age,StuInfo[0].CInfo.Cno,StuInfo[0].CInfo.Cname);
fclose(fp);
\n保存成功!
\n请按enter键返回主菜单!
}//以上的输入是以写的方式输入,下面是以读写的方式输入数据
for(i=0;
!
feof(fp);
i++)
fscanf(fp,"
%s%s%s%d%s%s"
StuInfo[i].Sname,&
StuInfo[i].Sex,&
StuInfo[i].Sno,&
StuInfo[i].Age,&
StuInfo[i].CInfo.Cno,&
StuInfo[i].CInfo.Cname);
num=i;
//记录数
if(num==N)
\n保存记录数超出结构体数组数的大小,请先修改N的值!
getchar();
StuInfo[num].Sname);
strcpy(StuInfo[num].Sex,sex);
i<
num;
i++)
if(strcmp(sno,StuInfo[i].Sno)==0)
{
printf("
该学号已经存在,请重新输入!
}
strcpy(StuInfo[num].Sno,sno);
StuInfo[num].Age=age;
strcpy(StuInfo[num].CInfo.Cno,cno);
StuInfo[num].CInfo.Cname);
//把该记录写到文件末尾
StuInfo[num].Sname,StuInfo[num].Sex,StuInfo[num].Sno,StuInfo[num].Age,StuInfo[num].CInfo.Cno,StuInfo[num].CInfo.Cname);
5.4修改模块
先判断文件StuInfo.txt以读(r)的方式能否打开,不能就返回,可以就读入记录;
然后输入学号查找记录,没找到就返回,找到就按照提示修改该记录,与输入模块一样,输入的格式要求:
性别为男或女,学号为11位且不能与除当前修改的记录的学号外的记录的学号重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。
输入完成后,再以写(w)的方式创建文件,不能创建就返回,可以就将结构体数组中的所有记录保存到文件中,这与添加稍有差别,最后返回主菜单。
voidmodify()
intfound=-1;
charStuNO[20];
FILE*fpr,*fpw;
if((fpr=fopen("
r"
))==NULL)
文件打不开!
feof(fpr);
i++)/
fscanf(fpr,"
fclose(fpr);
\n请输入学号选择要修改的记录:
StuNO);
if(strcmp(StuNO,StuInfo[i].Sno)==0)
found=i;
\n你要修改的学生信息为:
printf("
姓名性别学号年龄班号班名\n"
printf("
%s\t%s\t%s\t%d\t%s\t%s\n"
StuInfo[i].Sname,StuInfo[i].Sex,StuInfo[i].Sno,StuInfo[i].Age,StuInfo[i].CInfo.Cno,StuInfo[i].CInfo.Cname);
\n请按照提示输入学生的新信息:
scanf("
StuInfo[found].Sname);
strcpy(StuInfo[found].Sex,sex);
if((i!
=found)&
(strcmp(sno,StuInfo[i].Sno)==0))
strcpy(StuInfo[found].Sno,sno);
StuInfo[found].Age=age;
strcpy(StuInfo[found].CInfo.Cno,cno);
StuInfo[found].CInfo.Cname);
if((fpw=fopen("
文件打不开,保存失败!
i++)//保存文件
fprintf(fpw,"
fclose(fpw);
\n修改成功!
if(found<
0)
\n没有找到该学号的记录:
}
5.5浏览模块
voidbrowse()
))==NULL)
\n已添加%d个学生信息\n\n"
num);
姓名性别学号年龄班号班名\n"
%s\t%s\t%s\t%d\t%s%s\n"
5.6查询模块
voidquiry()
\n1-按学号查询\t2-按姓名
查询\t3-某班学生信息\t4-返回\n"
\n请输入数字选择:
1||cho