C语言实现学生学籍管理系统课程设计
目录
- 设计要求
- 完整代码
- 运行结果
本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下
设计要求
设计学籍管理系统
1、添加学生信息
2、浏览学生信息
3、查询学生信息
4、修改学生信息
5、册J除学生信息
6、排序学生信息
7、读取文件学生
8、保存到文件
完整代码
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #include<windows.h> #define M 80//对结构体变量(学生数目)进行宏定义 const char* path = "D://C 语言课程设计//信息存储文件.txt"; FILE* fp;//定义指向文件的指针 struct student { char name[20]; //姓名 char sex[10]; //性别 int age; //年龄 char num[20]; //学号 char major[30];//专业 char classes[30];//班级 int math;//数学成绩 int english;//英语成绩 };//定义结构体变量 int jiami(); void input(struct student stu[M]); void output(struct student stu[M]); void lookfor(struct student stu[M]); void order(struct student stu[M]); void delete_s(struct student stu[M]); void modify(struct student stu[M]); void xuehao(struct student stu[M]); void xingming(struct student stu[M]); void fileread(struct student stu[M]); void filewrite(struct student stu[M]); int count;//判断学生的数目 struct student t; int jiami() { int s = 123, m;//s 为密码,m 为输入的密码 int i = 0;//用来判断输入的密码是否正确 printf("请输入密码(仅有三次机会):"); scanf("%d", &m);//第一次输入密码 if (m != s) { printf("密码错误,还有两次机会:"); scanf("%d", &m);//第二次输入密码 if (m != s) { printf("密码错误,最后一次机会:"); scanf("%d", &m);//第三次输入密码 if (m != s) { printf("密码错误\n"); } else i = 1; } else i = 1; } else i = 1; return i; } int main() { int choice, sum, i;//choice 用来判断输入的命令;sum 用来记录输入错误的次数;i 用来判断输入的密码是否正确 struct student stu[M]; sum = 0;//初始化 sum i = jiami(); if (i == 1)//判断输入的密码是否正确 do { printf("\t-------------------------------------------------\n"); printf("\t\t+ 学生学籍管理系统 +\n"); printf("\t-------------------------------------------------\n"); printf("\t\t ***************\n"); printf("\t\t 1、添加学生信息\n"); printf("\t\t 2、浏览学生信息\n"); printf("\t\t 3、查询学生信息\n"); printf("\t\t 4、修改学生信息\n"); printf("\t\t 5、删除学生信息\n"); printf("\t\t 6、排序学生信息\n"); printf("\t\t 7、读取文件学生\n"); printf("\t\t 8、保存到文件\n"); printf("\t\t 9、退出系统\n"); printf("\t\t ***************\n"); printf("请输入你的选择\n"); //输出菜单 scanf("%d", &choice); //输入选择 fflush(stdin); //清空缓冲区 if (choice > 9 || choice <= 0) { sum++; if (sum >= 5) { printf("输入错误次数过多,程序将重新开始\n"); -7- system("pause"); system("cls"); //清屏 } } switch (choice) { case 1: input(stu); break; //添加学生信息 case 2: output(stu); break;//浏览学生信息 case 3: lookfor(stu); break; //寻找学生信息 case 4: modify(stu); break; //修改学生信息 case 5: delete_s(stu); break; //删除学生信息 case 6: order(stu); break; //排序学生信息 case 7: fileread(stu); break; //从文件中读取学生信息 case 8: filewrite(stu); break; //将学生信息写入文件 case 9: printf("感谢你使用学生学籍管理系统,请关掉程序!\n"); system("pause"); break; default: printf("无效的选择!请重新输入!\n"); break; } } while (choice != 9); printf("密码输入错误,程序结束\n"); return 0; } void input(struct student stu[M])//自定义输入函数 { system("cls");//清屏 printf("请添加要输入学生的信息\n"); printf("请输入学生的姓名\n"); scanf("%s", &stu[count].name );//输入学生姓名 printf("请输入学生的性别\n"); scanf("%s", &stu[count].sex);//输入学生性别 printf("请输入学生的年龄\n"); scanf("%d", &stu[count].age);//输入学生年龄 printf("请输入学生的学号\n"); scanf("%s", &stu[count].num);//输入学生学号 printf("请输入学生的专业\n"); scanf("%s", &stu[count].major);//输入学生专业 printf("请输入学生的班级\n"); scanf("%s", &stu[count].classes); //输入学生班级 printf("请输入学生的数学成绩\n"); scanf("%d", &stu[count].math); //输入学生数学成绩 printf("请输入学生的英语成绩\n"); scanf("%d", &stu[count].english);//输入学生英语成绩 count++;//计算学生人数 } void output(struct student stu[M])//自定义输出函数 { int j; system("cls");//清屏 if (count == 0)//判断目前是否有学生信息 { printf("当前已存入学生的信息为 0 个\n"); return; } else { for (j = 0; j < count; j++) { printf("姓名:%s, ", stu[j].name);//输出姓名 printf("性别:%s, ", stu[j].sex);//输出性别 printf("年龄:%d, ", stu[j].age);//输出年龄 printf("学号:%s, ", stu[j].num);//输出学号 printf("专业:%s, ", stu[j].major);//输出专业 printf("班级:%s, ", stu[j].classes);//输出班级 printf("数学成绩:%d, ", stu[j].math);//输出数学成绩 printf("英语成绩:%d\n", stu[j].english);//输出英语成绩 } } } void lookfor(struct student stu[M])//自定义查询函数 { int choice;//定义选择 system("cls");//清屏 if (count == 0)//判断目前是否有学生信息 { printf("当前已存学生的信息为 0 个,无法查询!!!\n"); return; } else { printf("请选择你所要查询的方式: 1、学号 2、姓名 3、取消\n"); scanf("%d", &choice);//输入选项 switch (choice) { case 3:return; break; case 2:xingming(stu); break;//按姓名查询 case 1:xuehao(stu); break; //按学号查询 default:printf("无效的选择!请重新输入!\n"); break; } } } void xuehao(struct student stu[M])//自定义学号查询函数 { int j, flag = 0; int k = 0;//判断是否找到该学生信息 char xh[25]; system("cls"); printf("请输入你想要查询的学生的学号"); scanf("%s", xh);//输入学号 fflush(stdin);//清空缓冲区 for (j = 0; j < count; j++) { if (strcmp(stu[j].num, xh) == 0)//找到该学号的学生信息 { printf("姓名:%s\t\t", stu[j].name);//输出姓名 printf("性别:%s\t\t", stu[j].sex);//输出性别 printf("年龄:%d\t\t", stu[j].age);//输出年龄 printf("学号:%s\t\t", stu[j].num);//输出学号 printf("专业:%s\t\t", stu[j].major);//输出专业 printf("班级:%s\t\t", stu[j].classes);//输出班级 printf("数学成绩:%d\t\t", stu[j].math);//输出数学成绩 printf("英语成绩:%d\t\t", stu[j].english);//输出英语成绩 //出该学生的信息 k = 1; } } if (k == 0)//没有找到该学号 { printf("很抱歉,没有你所需要的学生信息\n"); } } void xingming(struct student stu[M])//自定义姓名查询函数 { int n = 0; int j, flag = 0; char xm[25]; system("cls"); printf("请输入你想要查询的学生的姓名"); -11- scanf("%s", xm); fflush(stdin); for (j = 0; j < count; j++) { if (strcmp(stu[j].name, xm) == 0) { printf("姓名:%s\t\t", stu[j].name);//输出姓名 printf("性别:%s\t\t", stu[j].sex);//输出性别 printf("年龄:%d\t\t", stu[j].age);//输出年龄 printf("学号:%s\t\t", stu[j].num);//输出学号 printf("专业:%s\t\t", stu[j].major);//输出专业 printf("班级:%s\t\t", stu[j].classes);//输出班级 printf("数学成绩:%d\t\t", stu[j].math);//输出数学成绩 printf("英语成绩:%d\t\t", stu[j].english);//输出英语成绩 //输出该学生的信息 n = 1; } } if (n == 0) { printf("很抱歉,没有你所需要的学生信息\n"); } } void order(struct student stu[M])//自定义排序函数 { int j, k, choice, max; system("cls"); printf("请输入你想要进行排序的方式\n"); printf("1、数学 2、英语\n"); scanf("%d", &choice); //输入选项 switch (choice) { case 1: for (j = 0; j < count; j++) { max = j; for (k = j + 1; k < count; k++) if (stu[k].math > stu[max].math) { t = stu[k]; stu[k] = stu[max]; stu[max] = t; } }; break; //按数学成绩排序 case 2: for (j = 0; j < count; j++) { max = j; for (k = j + 1; k < count; k++) if (stu[k].english > stu[max].english) { t = stu[k]; stu[k] = stu[max]; stu[max] = t; } }; break; //按英语成绩排序 default: printf("无效的选择!请重新输入!\n"); break; } if (choice >= 1 && choice <= 5) printf("排序成功!!!"); } void delete_s(struct student stu[M])//自定义删除函数(按学号删除) { int j, index = 0, k = count; char xh[25]; system("cls"); if (count == 0)//判断学生数量是否为 0 { printf("当前已存学生信息为 0 个,无法删除!!!\n"); return; } else { printf("请输入你想要删除的同学学号\n"); scanf("%s", xh);//输入删除学生的学号 fflush(stdin); //清空缓冲区 for (j = 0; j < count; j++) { if (strcmp(stu[j].num, xh) == 0) //寻找该学生 { for (j = index; j < count; j++) stu[j] = stu[j + 1]; count--; if (count < k) //判断是否删除成功 printf("你已经删除成功\n"); } index++; } if (j == count) //判断是否有该学生的信息 printf("抱歉!!!没有你所需要删除的学生信息!*_*!\n"); } } void modify(struct student stu[M])//自定义修改函数 { int j, flag = 0, course; int i = 0; char xh[25]; system("cls"); if (count == 0) //判断是否有学生信息 { printf("当前已存学生信息为 0 个,无法修改!!!\n"); return; } else { printf("请输入你想要修改的同学学号\n"); -14- scanf("%s", &xh); //输入要修改学生的学号 fflush(stdin); for (j = 0; j < count; j++) { if (strcmp(stu[j].num, xh) == 0) { i = 1; printf("你确定要修改学生的信息吗?如果不确定的话,请关掉本程序吧!\n"); printf("选择课程: 1、数学 2、英语 3、跳过\n"); scanf("%d", &course); //选择要修改的一部分学生信息 switch (course) { case 1:printf("请输入你想要修改后的学生成绩\n"); scanf("%d", &stu[j].math); break; //修改数学成绩 case 2:printf("请输入你想要修改后的学生成绩\n"); scanf("%d", &stu[j].english); break;//修改英语成绩 case 3:break; default:printf("无效的选择!请重新输入!\n"); break; } printf("选择信息: 1、学号 2、性别 3、年龄 4、专业 5、班级 6、跳过\n"); scanf("%d", &course); //选择要修改的一部分学生信息 switch (course) { case 1:scanf("%s", stu[j].num); break;//修改学号 case 2:printf("请输入修改后的信息:"); scanf("%s", stu[j].name); break;//修改性别 case 3:printf("请输入修改后的信息:"); scanf("%d", &stu[j].age); break;//修改年龄 case 4:printf("请输入修改后的信息:"); scanf("%s", stu[j].major); break;//修改专业 case 5:printf("请输入修改后的信息:"); scanf("%s", &stu[j].classes); break;//修改班级 case 6:break; default:printf("无效的选择!请重新输入!\n"); break; } } } } if (i == 0) printf("无该学生信息!!\n"); return; } void filewrite(struct student stu[M])//自定义写入文件函数 { char f; int j = 0; system("cls"); printf("请选择是否要存入已输入的学生信息:'y'还是'n'???\n"); scanf("%c", &f); //判断是否写入文件 fflush(stdin); //清空缓冲区 while (f != 'y' && f != 'n') { if (f != 'y' && f != 'n') printf("输入错误,请重新输入\n"); printf("以下操作将会覆盖已存储的数据,确定请输入'y'或'n'?\n"); scanf("%c", &f); fflush(stdin); } if (f == 'y') { if ((fp = fopen(path, "wb")) == NULL) { printf("无法打开文件\n"); exit(0); } for (j = 0; j < count; j++) { fwrite(&stu[j], sizeof(struct student), 1, fp); //将学生信息写入文件 } fclose(fp); if (count == 0)//判断学生数目是否为 0 printf("没有文件,无法保存\n"); else printf("数据存储完毕\n"); system("pause"); } else return; } void fileread(struct student stu[M])//自定义读取文件信息函数 { char f; int j = 0; system("cls");//????????? printf("请选择是否要读取已输入的学生信息:'y'还是'n'?\n"); scanf("%c", &f); //判断是否从文件中读取学生信息 fflush(stdin); //清空缓冲区 if (f == 'y') { if ((fp = fopen(path, "rb")) == NULL) { printf("cannot open this file\n"); exit(0); } fread(&stu[j], sizeof(struct student), 1, fp); //从文件中读取学生信息 count = 0; count++; j++; while (fread(&stu[j], sizeof(struct student), 1, fp)) { j++; count++; } fclose(fp); printf("数据读取完毕!\n"); system("pause"); } else return; }
运行结果
本次登录设置的密码是123,当然你也可以自己修改密码
后面的需要执行哪项功能,就输入对应数字就可以!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
赞 (0)