C语言课程设计(学生证管理系统)

更新时间:2023-11-10 02:24:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言课程设计报告

一、课程设计目的 二、需求分析 三、总体分析 四、详细设计

4.0 头文件及结构体 4.1 主函数 4.2 菜单模块 4.3 添加模块 4.4 修改模块 4.5 查询模块

4.5.1 按学号查询 4.5.2 按名字查询

报告目录

4.5.3 按班级查询

4.6 统计模块

4.6.1 男生信息 4.6.2 女生信息

4.7 删除模块

五、总结 六、源代码

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

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

二二、、需需求求分分析析

学生证信息采用文件存储,因而要提供文件的输入输出操作;给定学号或班号,做相应 得操作,要提供查找操作;显示信息要提供显示操作;修改和删除信息要提供文件的修改和 删除操作; 提供一些统计各类信息的功能要实现统计操作; 另外提供键盘式选择菜单以实现 功能选择。

三三、、总总体体设设计计

:整个管理程序被设计为数据输入模块、数据查找模块、数据修改模块、数据删除模块和 数据统计模块。

四四、、详详细细设设计计

数据结构采用结构体,设计学生证信息结构体:

Struct studentCard { Char name[10];

Int sex; //0 表示男,1 表示女 Char stuNo[10]; //学号

Int classNo; //班号 …… //其他信息 }StuCard;

(1)主函数

主函数中,显示功能菜单:信息输入(1) 信息查找(2) 信息修改(3) 信息删 除(4) 信息统计(5) 按相应的数字键则进入相应的计算模块。

(2)数据输入模块 输入学生的学生证信息,把该信息以追加的方式写入学生证信息管理文件。 (3)数据查找模块 进入该模块,首先显示提示菜单:按学号查找(1) 按班级查找(2) 按学号查找,则提示输入学号,然后采用基本查找算法(顺序查找)在学生证信息文件中查找学号字段,当找到该记录时,则输出该学生信息,停止继续查找。 按班级查找,则提示输入班级班号,然后采用基本查找算法(顺序查找)在学生证信息 文件中查找班号字段,如果班号匹配,则输出该学生信息,直到文件结束。

(4)数据修改模块 在主菜单中选择(3) ,则进入数据修改模块。屏幕上提示输入要修改的学生学号。输入 学号后,则采用基本查找算法找到该学生信息,修改之。

- 2 -

(5)数据删除模块 与数据修改模块相似,只是找到相应的学生信息后删除,即不再写入文件。 (6)数据统计模块 提供对班级学生数、女生人数、男生人数的统计。通过菜单选择统计字段。建立一个计 数器,初始化为 0。例如统计班级学生数,则提示输入班号,然后查找学生证信息文件,比 较班号,如果匹配,则计数器加 1,当文件结束后,输出计数器的值。女生人数和男生人数 的统计与此类似。

5.0 头文件及结构体

#include #include #include #define N 100 struct Class

{

char Cname[20]; char clas[20];

};

struct Student

{

char name[20]; char Sex[10]; char hao[20]; int Age;

struct Class CInfo;

}stucard[N];

5.1 主函数

void main() {

menu(); getchar(); }

5.2 菜单

void menu()

//菜单 //菜单

- 3 -

{

int chose;

int right; do {

system(\

printf(\

printf(\ ●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●\\n\printf(\ ◎ ◎\\n\printf(\ ● 学 生 证 管 理 系 统 ●\\n\printf(\ ◎ ◎\\n\printf(\ ● 作者: ●\\n\printf(\ ◎ ◎\\n\printf(\ ●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●\\n\printf(\ ◎ ◎\\n\printf(\ ● 1、添加学生信息 2、修改学生信息 ●\\n\printf(\ ◎ ◎\\n\printf(\ ● 3、查询学生信息 4、统计学生信息 ●\\n\printf(\ ◎ ◎\\n\printf(\ ● 5、删除学生信息 6、退出系统 ●\\n\printf(\ ◎ ◎\\n\printf(\ ●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●◎●\\n\printf(\

printf(\ 请选择您需要的操作序号(1-6)按回车确认:\\n\

scanf(\ if(chose<1||chose>7) {

printf(\输入错误,请重新输入!\\n\

right=1;

- 4 -

getchar();

}

else right=0; }while(right==1); switch(chose) { case 1:add(); break; case 2:modify(); break; case 3:find(); break; case 4:stastic(); break; case 5:Delete(); break; case 6:exit(0);

}

}5.3 添加模块 首先要判断文件StuInfo.txt是否存在,如果存在就以读写(r+)的方void add()

式打开,如果不存在,就以{char tishi[]={\ 姓名 性别 学号 写(w)的方式创建文件 年龄 班号 班级名\StuInfo.txt。输入格式要

int num;

求:性别为男或女,学号为 int i,k,fun;

11位且不能重复,年龄在 int age;

0-100之间,班级号为6位, char sno[20];

程序提供了完善的验证机 char sex[20];

制,输入错误时将提示重新 char cno[20];

输入直到正确为止。此外, int right;

如果以读写的方式打开,还 FILE*fp;

要判断记录数num

成立,因为结构体数组的大 {

小为N,当num=N时,表示 if((fp=fopen(\

已满,不能再存储数据,需 {

要修改N的值。

printf(\文件不存在且创建失败,返回!\\n\ menu(); }

fprintf(fp,\

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

printf(\您想输入几个学生的信息??:\\n\\n\

scanf(\

- 5 -

for(k=0;k100) { printf(\年龄应在0-100之间,请重新输入年龄!\\n\ right=1; getchar(); } else right=0; }while(right==1); stucard[0].Age=age; do {

- 6 -

printf(\班号(4位):\ scanf(\ if(strlen(cno)!=4) { printf(\输入错误,班号长度应为4位数!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(stucard[0].CInfo.clas,cno); printf(\班名:\ scanf(\

fprintf(fp,\ard[0].CInfo.clas,stucard[0].CInfo.Cname); } fclose(fp); printf(\保存成功!\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); }

for(i=0;!feof(fp);i++) //读取文件 {

fscanf(fp,\nfo.clas,&stucard[i].CInfo.Cname); }

num=i; if(num==N) {

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

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

printf(\您想输入几个学生的信息??:\\n\\n\ scanf(\for(k=0;k

- 7 -

do { printf(\性别(男或女):\ scanf(\ if((strcmp(sex,\男\女\ { printf(\输入错误,请输入男或女!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(stucard[num].Sex,sex); do { printf(\学号(10位):\ scanf(\ if(strlen(sno)!=10) { printf(\输入错误,学号长度应为10位数!\\n\ right=1; getchar(); } else right=0; for(i=0;i100) { printf(\年龄不大于100,请重新输入年龄!\\n\ right=1; getchar();

- 8 -

} else right=0; }while(right==1); stucard[num].Age=age; do { printf(\班号(4位):\ scanf(\ if(strlen(cno)!=4) { printf(\输入错误,班号长度应为4位数!\\n\ right=1; getchar(); } else right=0; }while(right==1); strcpy(stucard[num].CInfo.clas,cno); printf(\班名:\ scanf(\ //把该记录写到文件末尾

fprintf(fp,%um].Age,stucard[num].CInfo.clas,stucard[num].CInfo.Cname); }

fclose(fp);

printf(\恭喜你,添加成功!\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); }

5.4 修改模块

先判断文件StuInfo.txt以读(r)的方式能否打开,不能就返回,可以就读入记录;然后输入学号查找记录,没找到就返回,找到就按照提示修改该记录,与输入模块一样,输入的格式要求:性别为男或女,学号为11位且不能与除当前修改的记录的学号外的记录的学号重复,年龄在0-100之间,班级号为6位,程序提供了完善的验证机制,输入错误时将提示重新输入直到正确为止。输入完成后,再以写(w)的方式创建文件,不能创建就返回,可以就将结构体数组中的所有记录保存到文件中,这与添加稍有差别,最后返回主菜单。

- 9 -

void modify() //修改学生信息 {

int num; int i; int right; int age;

char sex[20]; char cno[20]; char sno[20]; int found=-1; char StuNO[20]; FILE*fpr,*fpw;

if((fpr=fopen(\ {

printf(\文件打开错误!\\n\ menu(); }

for(i=0;!feof(fpr);i++) //读取文件 {

fscanf(fpr,\nfo.clas,&stucard[i].CInfo.Cname); }

num=i; fclose(fpr);

printf(\请输入学号选择要修改的记录:\ scanf(\ for(i=0;i

if(strcmp(StuNO,stucard[i].hao)==0) { found=i; printf(\你要修改的学生信息为:\\n\\n\ printf(\姓名 性别 学号 年龄 班号 班名\\n\

printf(\.CInfo.clas,stucard[i].CInfo.Cname); printf(\请按照提示输入学生的新信息:\\n\ printf(\姓名:\

scanf(\ do {

printf(\性别(男或女):\ scanf(\

- 10 -

printf(\请输入班号:\ scanf(\

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

printf(\ 姓名 性别 学号 年龄 班号 班名\\n\ for(i=0;i

found=i;

printf(\ound].Age,stucard[found].CInfo.clas,stucard[found].CInfo.Cname); } }

if(found<0) printf(\没有找到该班号的记录!\\n\ printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); find(); }

5.7 统计模块

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

void stastic() {

int chose; int right; do {

system(\ printf(\全体男生\\t2-全体女生\\t3-返回\\n\ printf(\请输入数字选择:\ scanf(\ if(chose<1||chose>4) { right=1; getchar(); }

else right=0; }while(right==1);

- 16 -

switch(chose) { case 1: MaleNum(); printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); stastic(); break; case 2: FemaleNum(); printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); stastic(); break; case 3:menu(); }

}5.7.1 统计男生信息子模块

int MaleNum() //男生人数 {

int num; int count=0; int i; FILE*fp;

if((fp=fopen(\ {

printf(\文件打不开!\\n\ menu(); }

for(i=0;!feof(fp);i++) //读取文件 {

fscanf(fp,\nfo.clas,&stucard[i].CInfo.Cname); }

fclose(fp); num=i;

for(i=0;i

- 17 -

}

printf(\男生总人数为:%d\\n\ return 0; }

5.7.2 统计女生信息子模块

int FemaleNum() //女生人数 {

int num; int count=0; int i; FILE*fp;

if((fp=fopen(\ {

printf(\文件打开错误!\\n\ menu(); }

for(i=0;!feof(fp);i++) //读取文件 {

fscanf(fp,\nfo.clas,&stucard[i].CInfo.Cname); }

fclose(fp); num=i;

for(i=0;i

printf(\女生总人数为:%d\\n\ return 0; }

5.8 删除模块

void Delete() {

int num; int i;

int found=-1; char StuNO[20]; FILE*fpr,*fpw;

- 18 -

if((fpr=fopen(\ {

printf(\文件打开错误!\\n\ menu(); }

for(i=0;!feof(fpr);i++) //读取文件 {

fscanf(fpr,\nfo.clas,&stucard[i].CInfo.Cname); }

num=i; fclose(fpr);

printf(\请输入要删除的学号:\ scanf(\ for(i=0;i

if(strcmp(StuNO,stucard[i].hao)==0) { found=i; printf(\你删除的学生信息为:\\n\\n\ printf(\姓名 性别 学号 年龄 班号 班名\\n\

printf(\ound].Age,stucard[found].CInfo.clas,stucard[found].CInfo.Cname); if(found

printf(\文件打开错误!\\n\ menu(); } for(i=0;i

- 19 -

fprintf(fpw,\ard[i].CInfo.clas,stucard[i].CInfo.Cname); } fclose(fpw); printf(\删除成功!\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); } }

if(found<0) { printf(\没有找到该学号的记录:\\n\ printf(\请按enter键返回主菜单!\\n\ getchar(); getchar(); menu(); } }

六六、、总总结结

本次C语言课程设计非常有意义,它锻炼了我们解决实际问题的能力。由于本人对编程

感兴趣,在编程方面有一定基础,因此尝试着由自己完成整个系统,在设计的过程里也遇到了很多麻烦,但是通过查询参考书和网络,一个个疑难迎刃而解。通过这次实践课,不只是强化了我们C语言编程的能力,更重要的是使我们学会了一种工作方法,学会了如何规划、组织、设计、实施项目,从整体到局部,从局部又到整体。此外,在设计流程图和编制报告的过程里也学了不少东西,学会了用office visio制作流程图,学会了组织报告等等。

七七、、源源代代码码

#include #include #include #define N 100

- 20 -

if((fp=fopen(\ {

printf(\文件打不开!\\n\ menu(); }

for(i=0;!feof(fp);i++) //读取文件 {

fscanf(fp,\nfo.clas,&stucard[i].CInfo.Cname); } num=i; fclose(fp);

printf(\请输入学生学号:\ scanf(\ for(i=0;i

if(strcmp(no,stucard[i].hao)==0) { found=i; printf(\该学生的信息为:\\n\\n\ printf(\ 姓名 性别 学号 年龄 班号 班名\\n\

printf(\ound].Age,stucard[found].CInfo.clas,stucard[found].CInfo.Cname); } }

if(found<0) printf(\没有找到该班号的记录!\\n\ printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); find(); }

/*------------------------------------------------------------------------------------------------------*/ void byname() {

int found=-1; int num; int i;

char name[20]; FILE*fp;

if((fp=fopen(\

- 31 -

{

printf(\文件打不开!\\n\ menu(); }

for(i=0;!feof(fp);i++) //读取文件 {

fscanf(fp,\nfo.clas,&stucard[i].CInfo.Cname); } num=i; fclose(fp);

printf(\请输入学生姓名:\ scanf(\

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

printf(\ 姓名 性别 学号 年龄 班号 班名\\n\ for(i=0;i

if(strcmp(name,stucard[i].name)==0) { found=i;

printf(\ound].Age,stucard[found].CInfo.clas,stucard[found].CInfo.Cname); } }

if(found<0) printf(\没有找到该班号的记录!\\n\ printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); find(); }

/*------------------------------------------------------------------------------------------------------*/ void byclas() {

int found=-1; int num; int i;

char ClaNO[20]; FILE*fp;

if((fp=fopen(\ {

printf(\文件打不开!\\n\

- 32 -

menu(); }

for(i=0;!feof(fp);i++) //读取文件 {

fscanf(fp,\nfo.clas,&stucard[i].CInfo.Cname); }

num=i; fclose(fp);

printf(\请输入班号:\ scanf(\

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

printf(\ 姓名 性别 学号 年龄 班号 班名\\n\ for(i=0;i

found=i;

printf(\ound].Age,stucard[found].CInfo.clas,stucard[found].CInfo.Cname); } }

if(found<0) printf(\没有找到该班号的记录!\\n\ printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); find(); }

/********************************************************************************************************************/ void stastic() {

int chose; int right; do {

system(\ printf(\全体男生\\t2-全体女生\\t3-返回\\n\ printf(\请输入数字选择:\ scanf(\ if(chose<1||chose>4)

- 33 -

{ right=1; getchar(); }

else right=0; }while(right==1); switch(chose) { case 1: MaleNum(); printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); stastic(); break; case 2: FemaleNum(); printf(\请按enter键返回上级菜单!\\n\ getchar(); getchar(); stastic(); break; case 3:menu(); } }

/*----------------------------------------------------------------------------------------------*/ int MaleNum() //男生人数 {

int num; int count=0; int i; FILE*fp;

if((fp=fopen(\ {

printf(\文件打不开!\\n\ menu(); }

for(i=0;!feof(fp);i++) //读取文件 {

fscanf(fp,\nfo.clas,&stucard[i].CInfo.Cname); }

- 34 -

fclose(fp); num=i;

for(i=0;i

printf(\男生总人数为:%d\\n\ return 0; }

/*----------------------------------------------------------------------------------------------*/

int FemaleNum() //女生人数 {

int num; int count=0; int i; FILE*fp;

if((fp=fopen(\ {

printf(\文件打开错误!\\n\ menu(); }

for(i=0;!feof(fp);i++) //读取文件 {

fscanf(fp,\nfo.clas,&stucard[i].CInfo.Cname); }

fclose(fp); num=i;

for(i=0;i

printf(\女生总人数为:%d\\n\ return 0; }

- 35 -

本文来源:https://www.bwwdw.com/article/kb9v.html

Top