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,当然你也可以自己修改密码
后面的需要执行哪项功能,就输入对应数字就可以!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关文章