学生证管理系统.docx

上传人:b****6 文档编号:7755848 上传时间:2023-01-26 格式:DOCX 页数:55 大小:504.92KB
下载 相关 举报
学生证管理系统.docx_第1页
第1页 / 共55页
学生证管理系统.docx_第2页
第2页 / 共55页
学生证管理系统.docx_第3页
第3页 / 共55页
学生证管理系统.docx_第4页
第4页 / 共55页
学生证管理系统.docx_第5页
第5页 / 共55页
点击查看更多>>
下载资源
资源描述

学生证管理系统.docx

《学生证管理系统.docx》由会员分享,可在线阅读,更多相关《学生证管理系统.docx(55页珍藏版)》请在冰豆网上搜索。

学生证管理系统.docx

学生证管理系统

C语言课程设计报告

学院:

地球科学学院

专业:

资源环境与城乡规划管理

题目:

学生证管理系统

班号:

xxxxxxxx

姓名:

李仙伟

学号:

xxxxxxxx

指导教师:

张锋

 

2010年11月26日

报告目录

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

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

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

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

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

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

5.1主函数………………………………………………………………………4

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

5.3公共函数……………………………………………………………………6

5.4添加模块……………………………………………………………………10

5.5修改模块……………………………………………………………………10

5.6浏览模块…………………………………………………………………11

5.7查询模块…………………………………………………………………11

5.7.1按学号查询……………………………………………………………12

5.7.2按名字查询……………………………………………………………13

5.7.3按班级查询……………………………………………………………14

5.8统计模块…………………………………………………………………14

5.8.1男生信息………………………………………………………………15

5.8.2女生信息………………………………………………………………17

5.8.3全体学生信息…………………………………………………………18

5.9删除模块…………………………………………………………………19

六、上机操作……………………………………………………………………20

6.1系统说明…………………………………………………………………20

6.2系统测试…………………………………………………………………20

七、总结……………………………………………………………………25

八、源代码…………………………………………………………………25

一、课程设计目的

通过实践,学会编制结构清晰、风格良好、数据结构适当的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

{

system("cls");

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公共函数

5.3.1返回主菜单函数

voidBackMenu()

{

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

\n");

getchar();

getchar();

menu();

}

5.3.2加载文件函数

以读(r)的方式打开StuInfo.txt文件,若不能打开,表示文件不存在,返回0;若文件存在,就读入所有记录到结构体数组中,并返回记录数;

intLoadFile()

{

inti;

FILE*fp;

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

{

return0;//返回0,表示文件不存在

}

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

returni;//返回记录条数

}

5.3.3输入第num+1条记录

首先要判断记录数num==N是否成立,因为结构体数组的大小为N,当num=N时,表示已满,不能再存储数据,需要修改N的值。

若num

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

voidInput(intnum)

{

inti;

intage;

charsno[20];

charsex[20];

charcno[20];

intright;

if(num==N)

{

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

BackMenu();

}

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

}

5.3.4保存文件

以写的方式新建文件StuInfo.txt,然后将结构体数组中的记录写入文件中。

voidSaveFile(intnum)//保存num+1条记录

{

FILE*fpw;

inti;

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

{

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

\n");

BackMenu();

}

for(i=0;i<=num;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");

}

5.4添加模块

voidadd()

{

intnum;

system("cls");

num=LoadFile();

Input(num);

SaveFile(num);

BackMenu();

}

5.5修改模块

与输入模块一样,输入的格式要求:

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

voidmodify()

{

intnum;

inti;

intright;

intfound=-1;

charStuNO[20];

num=LoadFile();

system("cls");

if(num==0)

{

printf("文件为空!

");

BackMenu();

}

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

}

}

if(found<0)

{

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

\n");

BackMenu();

}

Input(found);

SaveFile(num-1);

BackMenu();

}

5.6浏览模块

voidbrowse()//显示所有学生信息

{

intnum;

inti;

num=LoadFile();

system("cls");

if(num==0)

{

printf("文件为空!

");

BackMenu();

}

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

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

for(i=0;i

{

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

}

BackMenu();

}

5.7查询模块

voidquiry()

{

intchose;

intright;

do

{

system("cls");

printf("\n\t1-按学号查询\t2-按姓名查询\t3-某班学生信息\t4-返回\n");

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

");

scanf("%d",&chose);

if(chose<1||chose>4)

{

right=1;

getchar();

}

elseright=0;

}while(right==1);

switch(chose)

{

case1:

system("cls");bySno();break;

case2:

system("cls");bySname();break;

case3:

system("cls");byCno();break;

case4:

menu();

}

}

5.6.0返回查询子菜单

voidBackQuiry()

{

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

\n");

getchar();

getchar();

quiry();

}

5.6.1根据学号查找某学生的学生证信息:

voidbySno()

{

intfound=-1;

intnum;

inti;

charno[20];

num=LoadFile();

if(num==0)

{

printf("文件为空!

");

BackQuiry();

}

printf("\n请输入学生学号:

");

scanf("%s",no);

for(i=0;i

{

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

{

found=i;

printf("\n该学生的信息为:

\n\n");

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

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

}

}

if(found<0)

printf("\n没有找到该班号的记录!

\n");

BackQuiry();

}

5.6.2根据姓名查找某学生的学生证信息:

voidbySname()

{

intfound=-1;

intnum;

inti;

charname[20];

num=LoadFile();

if(num==0)

{

printf("文件为空!

");

BackQuiry();

}

printf("\n请输入学生姓名:

");

scanf("%s",name);

printf("\n叫该姓名的学生信息为:

\n\n");

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

for(i=0;i

{

if(strcmp(name,StuInfo[i].Sname)==0)

{

found=i;

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

}

}

if(found<0)

printf("\n没有找到该班号的记录!

\n");

BackQuiry();

}

5.6.3根据班号查询某个班级所有学生的学生证信息:

voidbyCno()

{

intfound=-1;

intnum;

inti;

charClaNO[20];

num=LoadFile();

if(num==0)

{

printf("文件为空!

");

BackQuiry();

}

printf("\n请输入班号:

");

scanf("%s",ClaNO);

printf("\n该班级的学生信息为:

\n\n");

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

for(i=0;i

{

if(strcmp(ClaNO,StuInfo[i].CInfo.Cno)==0)

{

found=i;

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

}

}

if(found<0)

printf("\n没有找到该班号的记录!

\n");

BackQuiry();

}

5.7统计模块

该模块实现了基本的统计功能,包括分别统计男女生的人数、平均年龄,以及全体学生的人数和平均年龄;

voidstastic()

{

intchose;

intright;

do

{

printf("\n1-全体男生\t2-全体女生\t3-全体学生\t4-返回\n");

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

");

scanf("%d",&chose);

if(chose<1||chose>4)

{

right=1;

getchar();

}

elseright=0;

}while(right==1);

switch(chose)

{

case1:

system("cls");Male();

BackStastic();break;

case2:

system("cls");Female();

BackStastic();break;

case3:

system("cls");StuMsg();

BackStastic();break;

case4:

menu();

}

}

5.7.0统计模块的公共函数,返回统计子菜单

voidBackStastic()

{

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

\n");

getchar();

getchar();

stastic();

}

5.7.1统计男生信息子模块

voidMale()

{

intnum;//人数

floatmg;//平均年龄

num=MaleNum();

mg=MaleMG();

printf("\n男生总人数为:

%d\n平均年龄为:

%f\n",num,mg);

}

5.7.1.1返回男生人数子函数

intMaleNum()

{

intnum;

intcount=0;

inti;

num=LoadFile();

if(num==0)

{

printf("文件为空!

");

BackStastic();

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

当前位置:首页 > 小学教育 > 语文

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

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