C语言实现学生学籍管理系统课程设计

2022-11-13 13:11:28 管理系统 课程设计 学籍

本文实例为大家分享了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,当然你也可以自己修改密码
后面的需要执行哪项功能,就输入对应数字就可以!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关文章