c/c++开发分享C语言版学生信息管理系统实例为大家分享了c语言版学生信息管理系统的具体代码,供大家参考,具体内容如下
一.题目分析
1.功能概述
1)查询学生信息
2)添加学生信息
3)修改学生信息
4)删除学生信息
5)刷新学生信息
6)保存学生信息
7)输出当前学生信息
2.题目要求:
1)使用结构体建立学生信息体制
2)实现七大基本功能
3)采用文件存储学生信息
二.算法构造
1.难点解析—-对文件的操作
1.1文件读取
file * fp; if ((fp = fopen(filename, "r")) == null) return 0; //从文件读取信息 while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].studentid, &stu[j].studentname, &stu[j].studentage, &stu[j].studentsex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) { j++; }
1.2文件写入
file * fp; fp = fopen(filename, "w"); for (i = 0; i < n; i++){ fprintf(fp, "%s%s%d%c%.lf%.lf%.lfn", stu[i].studentid, stu[i].studentname, stu[i].studentage, stu[i].studentsex, stu[i].score[0], stu[i].score[1], stu[i].score[2]); }
2.流程图
3.七大基本功能—-函数实现
3.1菜单函数:通过菜单建立用户与程序之间的交流
void menu()/* 界面*/ { int num; printf(" nn nn"); printf(" ******************************************************nn"); printf(" * 学生信息管理系统 *n n"); printf(" ******************************************************nn"); printf("*********************系统功能菜单************************* n"); printf(" ---------------------- ---------------------- n"); printf(" ********************************************* n"); printf(" * 0.系统帮助及说明 * * 1.刷新学生信息 * n"); printf(" ********************************************* n"); printf(" * 2.查询学生信息 * * 3.修改学生信息 * n"); printf(" ********************************************* n"); printf(" * 4.增加学生信息 * * 5.按学号删除信息 * n"); printf(" ********************************************* n"); printf(" * 6.显示当前信息 * * 7.保存当前学生信息* n"); printf(" ********************** ********************** n"); printf(" * 8.退出系统 * n"); printf(" ********************** n"); printf(" ---------------------- ---------------------- n"); printf("请选择菜单编号:"); scanf("%d", &num); switch (num) { case 0:help(); break; case 1:flush(); break; case 2:seek(); break; case 3:modify(); break; case 4:insert(); break; case 5:del(); break; case 6:display(); break; case 7:save(); break; case 8: k = 0; printf("即将退出程序!n"); break; default:printf("请在0-8之间选择n"); } }
3.2系统帮助与说明函数:适用于初次接触学生信息管理系统的用户参考
void help() { printf("n0.欢迎使用系统帮助!n"); printf("n1.初次进入系统后,请先选择增加学生信息;n"); printf("n2.按照菜单提示键入数字代号;n"); printf("n3.增加学生信息后,切记保存;n"); printf("n4.谢谢您的使用!n"); }
3.3刷新学生信息函数
功能:调用刷新信息函数后,文件中再无学生信息
int flush(){ char filename[len + 1]; int i = 0; printf("请输入要刷新学生信息的文件名:n"); scanf("%s", filename); int j = 0; file * fp; if ((fp = fopen(filename, "r")) == null) return 0; //从文件读取信息 while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].studentid, &stu[j].studentname, &stu[j].studentage, &stu[j].studentsex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) { j++; } n = j; printf("刷新成功!!!"); return n; }
3.4查询学生信息函数
功能:通过输入要查询的学生学号或者姓名,与系统中的学生信息进行对比,若相等,则输出该学生的基本信息;反之,则输出该学生在该管理系统中不存在
查询方式:
1)按照学号查询
2)按照姓名查询
void seek() /*查找*/ { int i, item, flag; char s1[21]; /* 以姓名和学号最长长度+1为准*/ printf("------------------n"); printf("-----1.按学号查询-----n"); printf("-----2.按姓名查询-----n"); printf("-----3.退出本菜单-----n"); printf("------------------n"); while (1) { printf("请选择子菜单编号:"); scanf("%d", &item); flag = 0; switch (item) { case 1: printf("请输入要查询的学生的学号:n"); scanf("%s", s1); for (i = 0; i<n; i++) if (strcmp(s1,stu[i].studentid) == 0) { flag = 1; printf("学生学号t学生姓名t年龄t性别tc语言成绩t高等数学t大学英语成绩n"); printf("--------------------------------------------------------------------n"); printf("%st%st%dt%6t%.1ft%.1ft%.1fn", stu[i].studentid,stu[i].studentname,stu[i].studentage,stu[i].studentsex,stu[i].score[0],stu[i].score[1],stu[i].score[2]); } if (0 == flag) printf("该学号不存在!n"); break; case 2: printf("请输入要查询的学生的姓名:n"); scanf("%s", s1); for (i = 0; i<n; i++) if (strcmp(stu[i].studentname, s1) == 0) { flag = 1; printf("学生学号t学生姓名t年龄t性别tc语言成绩t高等数学t大学英语成绩n"); printf("--------------------------------------------------------------------n"); printf("%st%st%dt%ct%.1ft%.1ft%.1fn", stu[i].studentid, stu[i].studentname, stu[i].studentage, stu[i].studentsex, stu[i].score[0], stu[i].score[1], stu[i].score[2]); } if (0 == flag) printf("该姓名不存在!n"); break; case 3:return; default:printf("请在1-3之间选择n"); } } }
3.5修改学生信息
功能:通过输入学号来选择要修改的该学号学生的信息内容,从而完成修改信息操作;
//修改学生信息 void modify() /*修改信息*/ { int i, item, num = -1; char sex1, s1[len + 1], s2[len + 1]; /* 以姓名和学号最长长度+1为准*/ float score1; printf("请输入要要修改的学生的学号:n"); scanf("%s", s1); for (i = 0; i < n; i++){ if (strcmp(stu[i].studentid, s1) == 0){/*比较字符串是否相等*/ num = i; printf("------------------n"); printf("1.修改姓名n"); printf("2.修改年龄n"); printf("3.修改性别n"); printf("4.修改c语言成绩n"); printf("5.修改高等数学成绩n"); printf("6.修改大学英语成绩n"); printf("7.退出本菜单n"); printf("------------------n"); while (1) { printf("请选择子菜单编号:"); scanf("%d", &item); switch (item) { case 1: printf("请输入新的姓名:n"); scanf("%s", s2); strcpy(stu[num].studentname, s2); break; case 2: printf("请输入新的年龄:n"); scanf("%d", stu[num].studentage); break; case 3: printf("请输入新的性别:n"); scanf("%s", &sex1); stu[i].studentsex = sex1; break; case 4: printf("请输入新的c语言成绩:n"); scanf("%f", &score1); stu[num].score[0] = score1; break; case 5: printf("请输入新的高等数学成绩:n"); scanf("%f", &score1); stu[num].score[1] = score1; break; case 6: printf("请输入新的大学英语成绩:n"); scanf("%f", &score1); stu[num].score[2] = score1; break; case 7: return; default:printf("请在1-7之间选择n"); } } printf("修改完毕!请及时保存!n"); } else{ printf("没有该学生学号!!!"); } } }
3.6添加学生信息函数
功能:添加学生信息,并保存至文件中
//添加学生信息函数 void insert() /*插入函数*/ { int i = n, j, flag; printf("请输入待增加的学生数:n"); scanf("%d", &m); if (m > 0){ do { flag = 1; while (flag) { flag = 0; printf("请输入第%d位学生的学号:n", i + 1); scanf("%s", stu[i].studentid); for (j = 0; j < i; j++){ if (strcmp(stu[i].studentid, stu[j].studentid) == 0){ printf("该学号已存在,请重新输入!n"); flag = 1; break; } } } printf("请输入第%d 个学生的姓名:n", i+1); scanf("%s", stu[i].studentname); printf("请输入第%d 个学生的年龄:n", i+1); scanf("%d", &stu[i].studentage); printf("请输入第%d 个学生的性别:n", i+1); scanf(" %c", &stu[i].studentsex); printf("请输入第%d 个学生的c语言成绩n",i+1); scanf("%f", &stu[i].score[0]); printf("请输入第%d 个学生的高等数学成绩:n", i+1); scanf("%f", &stu[i].score[1]); printf("请输入第%d 个学生的大学英语成绩:n", i+1); scanf("%f", &stu[i].score[2]); if (0 == flag){ i++; } } while (i<n + m); } n += m; printf("学生信息增加完毕!!!n"); system("pause"); }
3.7删除学生信息函数
功能:通过输入要删除学生信息的学号,删除该学生在该管理系统中的所有信息;
//删除学生信息函数 void del() { int i, j, flag = 0; char s1[len + 1]; printf("请输入要删除学生的学号:n"); scanf("%s", s1); for (i = 0; i < n; i++){ if (strcpy(stu[i].studentid, s1) == 0){ flag = 1; //要删除学生后面的学生往前移一位 for (j = i; j < n - 1; j++){ stu[j] = stu[j + 1]; } } } //查找失败 if (0 == flag){ printf("该学号不存在!!!n"); } if (1 == flag){ printf("删除成功!!!"); //删除成功,学生人数减1 n--; } system("pause"); }
3.8显示当前学生信息
功能:可以输出进行多种操作后的学生信息管理系统中的所有学生信息;
//显示全部数据信息 void display() { int i; printf("共有%d位学生的信息:n", n); if (0 != n) { printf("学生学号 t学生姓名 t年龄 t性别 tc语言成绩t高等数学 t大学英语成绩n"); printf("--------------------------------------------------------------------n"); for (i = 0; i<n; i++) { printf("%s t%s t%d t%c t%.1ft%.1f t%.1fn", stu[i].studentid, stu[i].studentname, stu[i].studentage, stu[i].studentsex, stu[i].score[0],stu[i].score[1],stu[i].score[2]); } } system("pause"); }
3.8保存学生信息
功能:将进行某些操作后的学生信息保存到指定文件中
void save(){ int i; file *fp; char filename[len + 1]; printf("请输入要保存的文件名:n"); scanf("%s", filename); fp = fopen(filename, "w"); for (i = 0; i < n; i++){ fprintf(fp, "%s%s%d%c%.lf%.lf%.lfn", stu[i].studentid, stu[i].studentname, stu[i].studentage, stu[i].studentsex, stu[i].score[0], stu[i].score[1], stu[i].score[2]); } printf("保存成功!!!n"); fclose(fp); system("pause"); }
三.源程序代码
#define _crt_secure_no_warnings 1 #include<stdio.h> /*i/o函数*/ #include<stdlib.h> /*其它说明*/ #include<string.h> /*字符串函数*/ #define len 15 /* 学号和姓名最大字符数,实际请更改*/ #define n 50 /* 最大学生人数,实际请更改*/ int k = 1, n = 0, m = 0;/* n代表当前记录的学生人数*/ //函数声明 void readfile(); void seek(); void modify(); void insert(); void del(); void display(); void save(); void menu(); //结构体保存学生信息 struct student{ char studentid[len+1]; char studentname[len+1]; int studentage; char studentsex; float score[3]; }stu[n]; //主函数 int main() { while (k) { menu(); } system("pause"); return 0; } //系统帮助函数 void help() { printf("n0.欢迎使用系统帮助!n"); printf("n1.初次进入系统后,请先选择增加学生信息;n"); printf("n2.按照菜单提示键入数字代号;n"); printf("n3.增加学生信息后,切记保存;n"); printf("n4.谢谢您的使用!n"); } //刷新文件 int flush(){ char filename[len + 1]; int i = 0; printf("请输入要刷新学生信息的文件名:n"); scanf("%s", filename); int j = 0; file * fp; if ((fp = fopen(filename, "r")) == null) return 0; //从文件读取信息 while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].studentid, &stu[j].studentname, &stu[j].studentage, &stu[j].studentsex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) { j++; } n = j; printf("刷新成功!!!"); return n; } //查找学生信息 void seek() /*查找*/ { int i, item, flag; char s1[21]; /* 以姓名和学号最长长度+1为准*/ printf("------------------n"); printf("-----1.按学号查询-----n"); printf("-----2.按姓名查询-----n"); printf("-----3.退出本菜单-----n"); printf("------------------n"); while (1) { printf("请选择子菜单编号:"); scanf("%d", &item); flag = 0; switch (item) { case 1: printf("请输入要查询的学生的学号:n"); scanf("%s", s1); for (i = 0; i<n; i++) if (strcmp(s1,stu[i].studentid) == 0) { flag = 1; printf("学生学号t学生姓名t年龄t性别tc语言成绩t高等数学t大学英语成绩n"); printf("--------------------------------------------------------------------n"); printf("%st%st%dt%6t%.1ft%.1ft%.1fn", stu[i].studentid,stu[i].studentname,stu[i].studentage,stu[i].studentsex,stu[i].score[0],stu[i].score[1],stu[i].score[2]); } if (0 == flag) printf("该学号不存在!n"); break; case 2: printf("请输入要查询的学生的姓名:n"); scanf("%s", s1); for (i = 0; i<n; i++) if (strcmp(stu[i].studentname, s1) == 0) { flag = 1; printf("学生学号t学生姓名t年龄t性别tc语言成绩t高等数学t大学英语成绩n"); printf("--------------------------------------------------------------------n"); printf("%st%st%dt%ct%.1ft%.1ft%.1fn", stu[i].studentid, stu[i].studentname, stu[i].studentage, stu[i].studentsex, stu[i].score[0], stu[i].score[1], stu[i].score[2]); } if (0 == flag) printf("该姓名不存在!n"); break; case 3:return; default:printf("请在1-3之间选择n"); } } } //修改学生信息 void modify() /*修改信息*/ { int i, item, num = -1; char sex1, s1[len + 1], s2[len + 1]; /* 以姓名和学号最长长度+1为准*/ float score1; printf("请输入要要修改的学生的学号:n"); scanf("%s", s1); for (i = 0; i < n; i++){ if (strcmp(stu[i].studentid, s1) == 0){/*比较字符串是否相等*/ num = i; printf("------------------n"); printf("1.修改姓名n"); printf("2.修改年龄n"); printf("3.修改性别n"); printf("4.修改c语言成绩n"); printf("5.修改高等数学成绩n"); printf("6.修改大学英语成绩n"); printf("7.退出本菜单n"); printf("------------------n"); while (1) { printf("请选择子菜单编号:"); scanf("%d", &item); switch (item) { case 1: printf("请输入新的姓名:n"); scanf("%s", s2); strcpy(stu[num].studentname, s2); break; case 2: printf("请输入新的年龄:n"); scanf("%d", stu[num].studentage); break; case 3: printf("请输入新的性别:n"); scanf("%s", &sex1); stu[i].studentsex = sex1; break; case 4: printf("请输入新的c语言成绩:n"); scanf("%f", &score1); stu[num].score[0] = score1; break; case 5: printf("请输入新的高等数学成绩:n"); scanf("%f", &score1); stu[num].score[1] = score1; break; case 6: printf("请输入新的大学英语成绩:n"); scanf("%f", &score1); stu[num].score[2] = score1; break; case 7: return; default:printf("请在1-7之间选择n"); } } printf("修改完毕!请及时保存!n"); } else{ printf("没有该学生学号!!!"); } } } void sort()//按学号排序 { int i, j, k, *p, *q, s; char temp[len + 1], ctemp; float ftemp; for (i = 0; i<n - 1; i++) { for (j = n - 1; j>i; j--) if (strcmp(stu[j - 1].studentid, stu[j].studentid)>0) { strcpy(temp, stu[j - 1].studentid); strcpy(stu[j - 1].studentid, stu[j].studentid); strcpy(stu[j].studentid, temp); strcpy(temp, stu[j - 1].studentname); strcpy(stu[j - 1].studentname, stu[j].studentname); strcpy(stu[j].studentname, temp); ctemp = stu[j - 1].studentsex; stu[j - 1].studentsex = stu[j].studentsex; stu[j].studentsex = ctemp; p = &stu[j - 1].studentage; q = &stu[j].studentage; s = *q; *q = *p; *p = s; for (k = 0; k<3; k++) { ftemp = stu[j - 1].score[k]; stu[j - 1].score[k] = stu[j].score[k]; stu[j].score[k] = ftemp; } } } } //添加学生信息函数 void insert() /*插入函数*/ { int i = n, j, flag; printf("请输入待增加的学生数:n"); scanf("%d", &m); if (m > 0){ do { flag = 1; while (flag) { flag = 0; printf("请输入第%d位学生的学号:n", i + 1); scanf("%s", stu[i].studentid); for (j = 0; j < i; j++){ if (strcmp(stu[i].studentid, stu[j].studentid) == 0){ printf("该学号已存在,请重新输入!n"); flag = 1; break; } } } printf("请输入第%d 个学生的姓名:n", i+1); scanf("%s", stu[i].studentname); printf("请输入第%d 个学生的年龄:n", i+1); scanf("%d", &stu[i].studentage); printf("请输入第%d 个学生的性别:n", i+1); scanf(" %c", &stu[i].studentsex); printf("请输入第%d 个学生的c语言成绩n",i+1); scanf("%f", &stu[i].score[0]); printf("请输入第%d 个学生的高等数学成绩:n", i+1); scanf("%f", &stu[i].score[1]); printf("请输入第%d 个学生的大学英语成绩:n", i+1); scanf("%f", &stu[i].score[2]); if (0 == flag){ i++; } } while (i<n + m); } n += m; printf("学生信息增加完毕!!!n"); system("pause"); } //删除学生信息函数 void del() { int i, j, flag = 0; char s1[len + 1]; printf("请输入要删除学生的学号:n"); scanf("%s", s1); for (i = 0; i < n; i++){ if (strcpy(stu[i].studentid, s1) == 0){ flag = 1; //要删除学生后面的学生往前移一位 for (j = i; j < n - 1; j++){ stu[j] = stu[j + 1]; } } } //查找失败 if (0 == flag){ printf("该学号不存在!!!n"); } if (1 == flag){ printf("删除成功!!!"); //删除成功,学生人数减1 n--; } system("pause"); } //显示全部数据信息 void display() { int i; printf("共有%d位学生的信息:n", n); if (0 != n) { printf("学生学号 t学生姓名 t年龄 t性别 tc语言成绩t高等数学 t大学英语成绩n"); printf("--------------------------------------------------------------------n"); for (i = 0; i<n; i++) { printf("%s t%s t%d t%c t%.1ft%.1f t%.1fn", stu[i].studentid, stu[i].studentname, stu[i].studentage, stu[i].studentsex, stu[i].score[0],stu[i].score[1],stu[i].score[2]); } } system("pause"); } void save(){ int i; file *fp; char filename[len + 1]; printf("请输入要保存的文件名:n"); scanf("%s", filename); fp = fopen(filename, "w"); for (i = 0; i < n; i++){ fprintf(fp, "%s%s%d%c%.lf%.lf%.lfn", stu[i].studentid, stu[i].studentname, stu[i].studentage, stu[i].studentsex, stu[i].score[0], stu[i].score[1], stu[i].score[2]); } printf("保存成功!!!n"); fclose(fp); system("pause"); } void menu()/* 界面*/ { int num; printf(" nn nn"); printf(" ******************************************************nn"); printf(" * 学生信息管理系统 *n n"); printf(" ******************************************************nn"); printf("*********************系统功能菜单************************* n"); printf(" ---------------------- ---------------------- n"); printf(" ********************************************* n"); printf(" * 0.系统帮助及说明 * * 1.刷新学生信息 * n"); printf(" ********************************************* n"); printf(" * 2.查询学生信息 * * 3.修改学生信息 * n"); printf(" ********************************************* n"); printf(" * 4.增加学生信息 * * 5.按学号删除信息 * n"); printf(" ********************************************* n"); printf(" * 6.显示当前信息 * * 7.保存当前学生信息* n"); printf(" ********************** ********************** n"); printf(" * 8.退出系统 * n"); printf(" ********************** n"); printf(" ---------------------- ---------------------- n"); printf("请选择菜单编号:"); scanf("%d", &num); switch (num) { case 0:help(); break; case 1:flush(); break; case 2:seek(); break; case 3:modify(); break; case 4:insert(); break; case 5:del(); break; case 6:display(); break; case 7:save(); break; case 8: k = 0; printf("即将退出程序!n"); break; default:printf("请在0-8之间选择n"); } }
四.调试、测试以及实验结果
1.调试:
2.测试:
输入数据类型与定义时不符合,程序运行过程中会出现错误
3.实验结果:
(1)~(9)是一个连续的运行实验结果
(1)运行菜单
(2)添加学生信息
(3)保存学生信息
(4)显示全部信息
(5)修改学生信息
(6)显示修改后全部信息
(7)刷新学生信息
(8)保存学生信息
(9)显示刷新后的全部信息
五、总结
编写一个功能齐全的、方便用户操作的学生管理系统,需要长期的实践与积累。
实践时检验的好办法,学到的知识经过实践的检验,才能更好的被自身吸收。文件的操作的程序编写应用对我来说,是一个没有经过多次实践的问题,所以我在写这部分程序时,还是有些难度。该程序中还存在一个问题就是,当输入一个与定义时不符的数据,程序在运行过程中会出现错误,修改办法还在思考,欢迎大家来与我互相共勉。
以上就是c/c++开发分享C语言版学生信息管理系统的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/596272.html