写在前面:欢迎来到「发奋的小张」的博客。我是小张,一名普通的在校大学生。在学习之余,用博客来记录我学习过程中的点点滴滴,也希望我的博客能够更给同样热爱学习热爱技术的你们带来收获!希望大家多多关照,我们一起成长一起进步。也希望大家多多支持我鸭,喜欢我就给我一个关注吧!
题目:学生管理系统设计
功能:学生管理系统设计,每个学生信息作为一条记录,包括姓名、学号、性别、出生年月、专业、班级、家庭地址、宿舍号码等。
系统要求实现以下功能:
1、输入功能:录入学生信息(包括学生学号、姓名、性别、出生年月、专业等);
2、显示功能:完成学生记录的显示。
3、查找功能:完成按学号或姓名查找学生的相关记录,并显示。
分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。2、完成信息的录入和显示(即通过编程创建文件,输入学生信息并可将文件内容显示出来)3、完成修改功能,即输入学号,可修改该学生的信息4、进一步要求,在使用修改功能时要求输入密码,密码正确才能修改信息否则不行。
要求:1、用C语言实现程序设计;
2、利用结构体数组、链表等实现学生信息表达、查询等,充分体现数据结构的知识;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序要有注释。
5、程序中所用到的排序查找方法需采用数据结构中所学方法实现,要求方法实用效率高。
一、总体设计
1.程序的总体设计
2. 数据结构
数据结构如下:
//定义结构体 typedef struct person {
char num[10]; //学号 char name[15]; //姓名 int sex; //性别 0为女 1为男 char birth[10]; //出生年月 char ji[20]; //专业 }person;
3. 函数原型声明
函数声明:
void menu_filename() void menu_select() void add() void scan() void query() void date() void amend() void delet() void main()
二、功能实现
1.main( )流程图

2.void amend()流程图

3.void delet()流程图

4.void date()流程图

5.void amend()流程图

三、测试及调试(测试方案、存在的问题及解决方法)
四、总结
五,源代码
由于篇幅过大,此处只粘贴部分代码,想要源代码的小伙伴,可以去这个链接下载!
下载链接: 源码.
代码:
/* ? C语言课程设计任务书及指导书5 题目:学生管理系统设计 功能:学生管理系统设计,每个学生信息作为一条记录,包括姓名、学号、性别、出生年月、专业、班级、家庭地址、宿舍号码等。 系统要求实现以下功能: 1、输入功能:录入学生信息(包括学生学号、姓名、性别、出生年月、专业等); 2、显示功能:完成学生记录的显示。 3、查找功能:完成按学号或姓名查找学生的相关记录,并显示。 分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。2、完成信息的录入和显示(即通过编程创建文件,输入学生信息并可将文件内容显示出来)3、完成修改功能,即输入学号,可修改该学生的信息4、进一步要求,在使用修改功能时要求输入密码,密码正确才能修改信息否则不行。 要求:1、用C语言实现程序设计; 2、利用结构体数组、链表等实现学生信息表达、查询等,充分体现数据结构的知识; 3、系统的各个功能模块要求用函数的形式实现; 4、界面友好(良好的人机交互),程序要有注释。 5、程序中所用到的排序查找方法需采用数据结构中所学方法实现,要求方法实用效率高。 ? 课程设计实验报告要求: 1、预习报告:题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分 。 2、实验总结报告:流程图、主要源程序代码(需打印)、测试情况及调试中问题与解决方案、 小结等。 */ #include
#include
#include
typedef struct person //定义结构体 {
char num[10]; //学号 char name[15]; //姓名 int sex; //性别 0为女 1为男 char birth[10];//出生年月 char ji[20]; //专业 }person; person per[100]; //定义100 char filename[20]; //定义全局变量 void menu_filename() {
system("cls"); printf("请输入你要操作的文件名:"); scanf("\t%s",filename); } int menu_select() //菜单选择系统函数 {
char c; do{
system("cls"); printf("\t\t \n"); printf("\t\t * 学生管理系统 *\n"); printf("\t\t \n"); printf("\t\t ┌─────────────—┐\n"); printf("\t\t │ 1. 添加记录 2. 显示记录 │\n"); printf("\t\t │ │\n"); printf("\t\t │ 3. 信息查询 4. 数据计算 │\n"); printf("\t\t │ │\n"); printf("\t\t │ 5. 修改记录 6. 删除记录 │\n"); printf("\t\t │ │\n"); printf("\t\t │ 0. 退出程序 │\n"); printf("\t\t └─────────────—┘\n"); printf("\t\t请您选择(0-6):"); c=getchar(); }while(c<'0'||c>'6'); return (c-'0'); //字符减去’0‘得到的是数字整型// } //*// //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^// void add() //添加函数 {
FILE *fp; int i=0,n=0; char ch='y'; //首先定义ch='y' system("cls"); //清屏函数 系统中调用 while(ch =='y'|| ch =='Y') //其实只有当输入N或n时才跳出循环 {
printf(" ----学生纪录添加----\n"); printf("学号:\n"); scanf("\t%s",per[i].num); printf("姓名:\n"); scanf("\t%s",per[i].name); printf("性别:\n"); scanf("\t%d",&per[i].sex); printf("出生年月(例如2000年2月==》):\n"); scanf("\t%s",&per[i].birth); printf("专业:\n"); scanf("\t%s",&per[i].ji); printf("是否继续添加?(y/n)"); ch = getchar(); i++; n=n+1; system( "cls "); }system("pause"); //等待命令 if((fp=fopen(filename,"a"))==NULL) //以2进制形式进行文件尾追加// {
printf("cannot open the files\n"); system("pause"); return; //如果文件出现错误 就返回 } for(i=0;i<n;i++) if(fwrite(&per[i],sizeof(person),1,fp)!=1) //以2进制形式写入文件中//一次写入一个数组// printf("file write error\n"); fclose(fp); //关闭文件 system("pasue"); } //*// //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^// void scan() //显示记录 进行全面信息浏览 {
void amend(); //声明修改函数// char sign='y'; FILE *fp; int i=0,n; system("cls"); if((fp=fopen(filename,"r"))==NULL) //以2进制方式读取文件信息// {
printf("cannot open the files\n"); system("pause"); return; } while(!feof(fp)) //一直读取知道文件尾结束 {
fread(&per[i],sizeof(person),1,fp); //以2进制方式将文件信息读到数组内存中//一次读取一个// i++; } fclose(fp); printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); printf(" 学号 姓名 性别 出生 专业\n"); printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); for(n=0;n<i-1;n++) //循环全部输出 printf("\t%s \t%s \t\t%d \t%s \t%s\n",per[n].num,per[n].name,per[n].sex,per[n].birth,per[n].ji); printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); system("pause"); system("cls"); printf("是否需要修改?(y/n)"); scanf("\t%c",&sign); if(sign!='n'&&sign!='N') //选择是否在浏览后进行修改// amend(); system("pause"); } //*// //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^// //数据查询// void query() //学生信息的不同方式查询 {
FILE *fp; int i=0,n=0; int m; system("cls"); printf("\t\n请选择查询方式:\n"); printf("\t┌──────┐\n"); printf("\t│1------姓名 │\n"); printf("\t│2------学号 │\n"); printf("\t│3------返回 │\n"); printf("\t└──────┘\n"); printf("请输入你要查询的方式\n"); scanf("%d",&m); while(m!=1&&m!=2&&m!=3) {
printf("输入错误请重新查询\n"); scanf("%d",&m); } if((fp=fopen(filename,"r"))==NULL) //以2进制方式读取文件信息// {
printf("cannot open the files\n"); system("pause"); return; } while(!feof(fp)) {
fread(&per[i],sizeof(person),1,fp); //以2进制方式将文件信息读到数组内存中//一次读取一个// i++;n=n+1; } if(m==1) //姓名查询 {
char s[20]; int i=0; printf("\t请输入想查询的姓名:"); scanf("\t%s",s); while(strcmp(per[i].name,s)!=0&&i<n) i++; //比较per[i].name与所输入姓名是否相同// if(i==n) {
printf("\t通讯录中没有此人!\n"); system("pause"); return; } printf("\t学号: %s\n",per[i].num); printf("\t姓名: %s\n",per[i].name); printf("\t性别: %d\n",per[i].sex); printf("\t出生: %s\n",per[i].birth); printf("\t计算机: %s\n",per[i].ji); } if(m==2) //学号查询 {
char s[15]; int i=0; printf("请输入想查询的学号:"); scanf("\t%s",s); while(strcmp(per[i].num,s)!=0&&i<n)i++; //比较per[i].name与所输入学号是否相同// if(i==n) {
printf("\t通讯录中没有此人!\n"); system("pause"); return; } printf("\t学号: %s\n",per[i].num); printf("\t姓名: %s\n",per[i].name); printf("\t性别: %d\n",per[i].sex); printf("\t出生: %s\n",per[i].birth); printf("\t计算机: %s\n",per[i].ji); } fclose(fp); system("pause"); }
博主后记:
希望看到此篇博文的小伙伴,如果发现有什么不对的地方,欢迎在下方留言指正!博主一定虚心接受并改正!大家一起共同进步。如果对你有所帮助,可以给博主一个赞?。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205891.html原文链接:https://javaforall.net
