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
{
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;k - 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;i - 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 - 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 -
正在阅读:
C语言课程设计(学生证管理系统)11-10
C++程序设计2009-2010-1-A05-22
【精作】XX动漫人才培训实训基地市场推广策划计划书08-24
浅谈大学生学习军事理论课对于培养爱国主义精神的作用与意义12-17
基辛格简介11-27
安康市城市生物多样性保护规划纲要01-04
2014巡礼月闭幕晚会策划 (1)分析03-08
句子的歧义11-14
电子系第二届辩论赛决赛策划书01-05
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 学生证
- 语言
- 课程
- 设计
- 系统
- 管理
- 试卷B
- 秘书从业经验职业素养指导总结:会议礼仪知识每日一练(10月4日)
- 单层工业厂房排架结构设计复习习题库 2
- 理论力学典型解题方法
- 上饶市城市总体规划(2000-2020) 概要 - 图文
- 财务管理期末试卷(A)
- 五年级高思数论练习题
- 南方电网公司基建承包商日常检查考核扣分工作手册 - 图文
- 民间借贷融资对缓解中小企业融资难问题的分析
- 旗袍会部门职能
- 15-16年电大个人与团队管理机考题库大全(附答案)
- 仿生机器人研究概述 - 图文
- 我国自主汽车品牌的现状及发展策略
- USP34 61 非无菌产品的微生物检验:微生物计数检测
- 市场问卷调查
- 微观经济学 1
- 大学物理习题精选-答案 - 第2章 质点动力学
- 刘勇激情点亮课堂
- 对消防部队灭火战术及战训工作的几点思考
- 关于请求核准公司项目的请示