c语言课程设计报告大学论文.docx

上传人:b****7 文档编号:11197316 上传时间:2023-02-25 格式:DOCX 页数:85 大小:596.58KB
下载 相关 举报
c语言课程设计报告大学论文.docx_第1页
第1页 / 共85页
c语言课程设计报告大学论文.docx_第2页
第2页 / 共85页
c语言课程设计报告大学论文.docx_第3页
第3页 / 共85页
c语言课程设计报告大学论文.docx_第4页
第4页 / 共85页
c语言课程设计报告大学论文.docx_第5页
第5页 / 共85页
点击查看更多>>
下载资源
资源描述

c语言课程设计报告大学论文.docx

《c语言课程设计报告大学论文.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告大学论文.docx(85页珍藏版)》请在冰豆网上搜索。

c语言课程设计报告大学论文.docx

c语言课程设计报告大学论文

C语言课程设计报告

 

2010年11月26日

报告目录

一、课程设计目的………………………………………………………………3

二、实习内容及要求……………………………………………………………3

三、需求分析……………………………………………………………………3

四、总体分析……………………………………………………………………3

五、详细设计……………………………………………………………………4

5.0头文件及结构体……………………………………………………………4

5.1主函数………………………………………………………………………5

5.2菜单模块……………………………………………………………………5

5.3添加模块……………………………………………………………………6

5.4修改模块……………………………………………………………………10

5.5浏览模块…………………………………………………………………14

5.6查询模块…………………………………………………………………15

5.6.1按学号查询……………………………………………………………15

5.6.2按名字查询……………………………………………………………16

5.6.3按班级查询……………………………………………………………17

5.7统计模块…………………………………………………………………18

5.7.1男生信息………………………………………………………………19

5.7.2女生信息………………………………………………………………21

5.7.3全体学生信息…………………………………………………………23

5.8删除模块…………………………………………………………………23

六、上机操作……………………………………………………………………26

6.1系统说明…………………………………………………………………26

6.2系统测试…………………………………………………………………26

七、总结……………………………………………………………………32

八、源代码…………………………………………………………………32

一、课程设计目的

通过实践,学会编制结构清晰、风格良好、数据结构适当的C语言程序,加深对C语言基础知识的理解和掌握,进一步巩固C语言编程实践能力,锻炼思维逻辑和解决综合性实际问题的能力。

二、实习内容及要求

1、用C语言编写一个学生证管理系统,该系统具有以下功能:

(1)录入某位学生的学生证信息;

(2)给定学号,显示某位学生的学生证信息;

(3)给定某个班级的班号,显示该班所有学生的学生证信息;

(4)给定某位学生的学号,修改该学生的学生证信息;

(5)给定某位学生的学号,删除该学生的学生证信息;

(6)提供一些统计各类信息的功能;

(7)提供浏览所有学生的学生证信息的功能。

2、输入要求

应用程序运行后,在屏幕上显示一个菜单;用户可以根据要求,选定相应的操作项目;进入某个操作后,根据应用程序的提示,从键盘输入相应的信息。

3、输出要求

(1)应用程序运行后,要在屏幕上显示一个菜单;

(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式

及结束方式等。

三、需求分析

根据题目要求,学生信息要从文本文件中存取,所以本程序应该提供读写文件,显示、

统计、查询、修改记录,保存文件等操作,此外,还应该提供键盘式选择菜单实现功能。

四、总体设计

根据需求分析,可以把这个系统的设计分为添加、修改、查询、浏览、统计、删除六大

模块,其中查询模块可以分为三个子模块,统计模块可以分为三个子模块,子模块下面还有子

函数;系统功能模块图如下所示:

五、详细设计

5.0头文件及结构体

#include

#include

#include

#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");

printf("········································");

printf("菜单:

\t1-添加\t2-修改\t3-浏览全部\t4-查询\t5-统计\t6-删除\t7-退出\n");

printf("········································");

printf("请输入数字选择:

");

scanf("%d",&chose);

if(chose<1||chose>8)

{

right=1;

printf("输入错误,请重新输入!

\n");

getchar();

}

elseright=0;

}while(right==1);

switch(chose)

{

case1:

add();break;//添加模块

case2:

modify();break;//修改模块

case3:

browse();break;//浏览模块

case4:

quiry();break;//查询模块

case5:

stastic();break;//统计模块

case6:

Delete();break;//删除模块

case7:

exit(0);//退出

}

}

5.3添加模块

首先要判断文件StuInfo.txt是否存在,如果存在就以读写(r+)的方式打开,如果不存在,就以写(w)的方式创建文件StuInfo.txt。

输入格式要求:

性别为男或女,学号为11位且不能重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。

此外,如果以读写的方式打开,还要判断记录数num

voidadd()

{

intnum;//表示记录数

inti;

intage;//临时变量,用于验证输入的性别是否满足条件

charsno[20];//临时变量,用于验证输入的学号是否满足条件

charsex[20];//临时变量,用于验证输入的性别是否满足条件

charcno[20];//临时变量,用于验证输入的班号是否满足条件

intright;

FILE*fp;

if((fp=fopen("StuInfo.txt","r+"))==NULL)//以读写方式打开

{

if((fp=fopen("StuInfo.txt","w"))==NULL)//文件不存在就创建文件

{

printf("\n文件不存在且创建失败,返回!

\n");

menu();

}

printf("\n请按照提示输入学生信息:

\n\n");

printf("姓名:

");

scanf("%s",&StuInfo[0].Sname);

do

{

printf("\n性别(男或女):

");

scanf("%s",sex);

if((strcmp(sex,"男")!

=0)&&(strcmp(sex,"女")!

=0))

{

printf("输入错误,请输入男或女!

\n");

right=1;

getchar();

}

elseright=0;

}while(right==1);

strcpy(StuInfo[0].Sex,sex);

do

{

printf("\n学号(11位):

");

scanf("%s",sno);

if(strlen(sno)!

=11)

{

printf("输入错误,学号长度应为11位数!

\n");

right=1;

getchar();

}

elseright=0;

}while(right==1);

strcpy(StuInfo[0].Sno,sno);

do

{

printf("\n年龄:

");

scanf("%d",&age);

if(age<=0||age>100)

{

printf("年龄应在0-100之间,请重新输入年龄!

\n");

right=1;

getchar();

}

elseright=0;

}while(right==1);

StuInfo[0].Age=age;

do

{

printf("\n班号(6位):

");

scanf("%s",cno);

if(strlen(cno)!

=6)

{

printf("输入错误,班号长度应为6位数!

\n");

right=1;

getchar();

}

elseright=0;

}while(right==1);

strcpy(StuInfo[0].CInfo.Cno,cno);

printf("\n班名:

");

scanf("%s",&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);

printf("\n保存成功!

\n");

printf("\n请按enter键返回主菜单!

\n");

getchar();

getchar();

menu();

}//以上的输入是以写的方式输入,下面是以读写的方式输入数据

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)

{

printf("\n保存记录数超出结构体数组数的大小,请先修改N的值!

\n");

printf("\n请按enter键返回主菜单!

\n");

getchar();

getchar();

menu();

}

printf("\n请按照提示输入学生信息:

\n\n");

printf("姓名:

");

scanf("%s",&StuInfo[num].Sname);

do

{

printf("\n性别(男或女):

");

scanf("%s",sex);

if((strcmp(sex,"男")!

=0)&&(strcmp(sex,"女")!

=0))

{

printf("输入错误,请输入男或女!

\n");

right=1;

getchar();

}

elseright=0;

}while(right==1);

strcpy(StuInfo[num].Sex,sex);

do

{

printf("\n学号(11位):

");

scanf("%s",sno);

if(strlen(sno)!

=11)

{

printf("输入错误,学号长度应为11位数!

\n");

right=1;

getchar();

}

elseright=0;

for(i=0;i

{

if(strcmp(sno,StuInfo[i].Sno)==0)

{

printf("该学号已经存在,请重新输入!

\n");

right=1;

getchar();

}

}

}while(right==1);

strcpy(StuInfo[num].Sno,sno);

do

{

printf("\n年龄:

");

scanf("%d",&age);

if(age<=0||age>100)

{

printf("年龄应在0-100之间,请重新输入年龄!

\n");

right=1;

getchar();

}

elseright=0;

}while(right==1);

StuInfo[num].Age=age;

do

{

printf("\n班号(6位):

");

scanf("%s",cno);

if(strlen(cno)!

=6)

{

printf("输入错误,班号长度应为6位数!

\n");

right=1;

getchar();

}

elseright=0;

}while(right==1);

strcpy(StuInfo[num].CInfo.Cno,cno);

printf("\n班名:

");

scanf("%s",&StuInfo[num].CInfo.Cname);

//把该记录写到文件末尾

fprintf(fp,"\n%s\t%s\t%s\t%d\t%s\t%s",StuInfo[num].Sname,StuInfo[num].Sex,StuInfo[num].Sno,StuInfo[num].Age,StuInfo[num].CInfo.Cno,StuInfo[num].CInfo.Cname);

fclose(fp);

printf("\n保存成功!

\n");

printf("\n请按enter键返回主菜单!

\n");

getchar();

getchar();

menu();

}

 

5.4修改模块

先判断文件StuInfo.txt以读(r)的方式能否打开,不能就返回,可以就读入记录;然后输入学号查找记录,没找到就返回,找到就按照提示修改该记录,与输入模块一样,输入的格式要求:

性别为男或女,学号为11位且不能与除当前修改的记录的学号外的记录的学号重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。

输入完成后,再以写(w)的方式创建文件,不能创建就返回,可以就将结构体数组中的所有记录保存到文件中,这与添加稍有差别,最后返回主菜单。

 

voidmodify()

{

intnum;

inti;

intright;

intage;

charsex[20];

charcno[20];

charsno[20];

intfound=-1;

charStuNO[20];

FILE*fpr,*fpw;

if((fpr=fopen("StuInfo.txt","r"))==NULL)

{

printf("文件打不开!

\n");

menu();

}

for(i=0;!

feof(fpr);i++)/

{

fscanf(fpr,"%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;

fclose(fpr);

printf("\n请输入学号选择要修改的记录:

");

scanf("%s",StuNO);

for(i=0;i

{

if(strcmp(StuNO,StuInfo[i].Sno)==0)

{

found=i;

printf("\n你要修改的学生信息为:

\n\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);

printf("\n请按照提示输入学生的新信息:

\n");

printf("姓名:

");

scanf("%s",&StuInfo[found].Sname);

do

{

printf("\n性别(男或女):

");

scanf("%s",sex);

if((strcmp(sex,"男")!

=0)&&(strcmp(sex,"女")!

=0))

{

printf("输入错误,请输入男或女!

\n");

right=1;

getchar();

}

elseright=0;

}while(right==1);

strcpy(StuInfo[found].Sex,sex);

do

{

printf("\n学号(11位):

");

scanf("%s",sno);

if(strlen(sno)!

=11)

{

printf("输入错误,学号长度应为11位数!

\n");

right=1;

getchar();

}

elseright=0;

for(i=0;i

{

if((i!

=found)&&(strcmp(sno,StuInfo[i].Sno)==0))

{

printf("该学号已经存在,请重新输入!

\n");

right=1;

getchar();

}

}

}while(right==1);

strcpy(StuInfo[found].Sno,sno);

do

{

printf("\n年龄:

");

scanf("%d",&age);

if(age<=0||age>100)

{

printf("年龄应在0-100之间,请重新输入年龄!

\n");

right=1;

getchar();

}

elseright=0;

}while(right==1);

StuInfo[found].Age=age;

do

{

printf("\n班号(6位):

");

scanf("%s",cno);

if(strlen(cno)!

=6)

{

printf("输入错误,班号长度应为6位数!

\n");

right=1;

getchar();

}

elseright=0;

}while(right==1);

strcpy(StuInfo[found].CInfo.Cno,cno);

printf("\n班名:

");

scanf("%s",&StuInfo[found].CInfo.Cname);

if((fpw=fopen("StuInfo.txt","w"))==NULL)

{

printf("文件打不开,保存失败!

\n");

menu();

}

for(i=0;i

{

fprintf(fpw,"\n%s\t%s\t%s\t%d\t%s\t%s",StuInfo[i].Sname,StuInfo[i].Sex,StuInfo[i].Sno,StuInfo[i].Age,StuInfo[i].CInfo.Cno,StuInfo[i].CInfo.Cname);

}

fclose(fpw);

printf("\n修改成功!

\n");

printf("\n请按enter键返回主菜单!

\n");

getchar();

getchar();

menu();

}

}

if(found<0)

{

printf("\n没有找到该学号的记录:

\n");

printf("\n请按enter键返回主菜单!

\n");

getchar();

getchar();

menu();

}

}

5.5浏览模块

voidbrowse()

{

intnum;

inti;

FILE*fp;

if((fp=fopen("StuInfo.txt","r"))==NULL)

{

printf("文件打不开!

\n");

menu();

}

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);

}

fclose(fp);

num=i;

printf("\n已添加%d个学生信息\n\n",num);

printf("姓名性别学号年龄班号班名\n");

for(i=0;i

{

printf("%s\t%s\t%s\t%d\t%s%s\n",StuInfo[i].Sname,StuInfo[i].Sex,StuInfo[i].Sno,StuInfo[i].Age,StuInfo[i].CInfo.Cno,StuInfo[i].CInfo.Cname);

}

printf("\n请按enter键返回主菜单!

\n");

getchar();

getchar();

menu();

}

5.6查询模块

voidquiry()

{

intchose;

intright;

do

{

printf("\n1-按学号查询\t2-按姓名

查询\t3-某班学生信息\t4-返回\n");

printf("\n请输入数字选择:

");

scanf("%d",&chose);

if(chose<1|

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1