用c语言编写学生信息管理系统
我这有个差不多的,要吗?是我写的实训作业
程序:
#include <stdioh>
#include <stdlibh>
#include <stringh>
int man=0;
int j;
char str[20];
struct student
{
char id[11];
char name[10];
int n1;
int n2;
int n3;
int n4;
int n5;
int n6;
int n7;
int n8;
int n9;
int zong;
int ping;
}student[100],temp;
void read(void)
{
FILE cj;
int i,k;
man=0;
while(1)
{
printf("请输入要读取的文件:\n");
scanf("%s",&str);
if((cj=fopen(str,"r"))==NULL)
{
printf("打开失败\n");
}
else
{
break;
}
}
for(i=0;i<500;i++)
{
if(fscanf(cj,"%s %s %d %d %d %d %d %d %d %d %d",&student[i]id,&student[i]name,&student[i]n1,&student[i]n2,&student[i]n3,&student[i]n4,&student[i]n5,&student[i]n6,&student[i]n7,&student[i]n8,&student[i]n9)==-1)
{
break;
}
man=man+1;
}
printf("从%s读取去了“%d”条记录\n",str,man);
for(k=0;k<man;k++)
{
student[k]zong=student[k]n1+student[k]n2+student[k]n3+student[k]n4+student[k]n5+student[k]n6+student[k]n7+student[k]n8+student[k]n9;
}
for(i=0;i<man;i++)
{
student[i]ping=student[i]zong/9;
}
fclose(cj);
}
void write(void)
{
FILE cj;
int i;
char me;
printf("请确认是否保存(是:y,否:任意键):\n");
scanf("%s",&me);
if(me=='y')
{
if((cj=fopen(str,"w"))==NULL)
{
printf("保存失败\n");
}
for(i=0;i<man;i++)
{
fprintf(cj,"%s %s %d %d %d %d %d %d %d %d %d\n",student[i]id,student[i]name,student[i]n1,student[i]n2,student[i]n3,student[i]n4,student[i]n5,student[i]n6,student[i]n7,student[i]n8,student[i]n9);
}
printf("存了“%d”条记录到%s\n",man,str);
fclose(cj);
}
else
return;
}
void save(void)
{
FILE cj;
int i;
char me;
printf("请输入新的文件名:\n");
scanf("%s",&str);
printf("请确认是否保存(是:y,否:任意键):\n");
scanf("%s",&me);
if(me=='y')
{
if((cj=fopen(str,"w"))==NULL)
{
printf("保存失败\n");
}
for(i=0;i<man;i++)
{
fprintf(cj,"%s %s %d %d %d %d %d %d %d %d %d\n",student[i]id,student[i]name,student[i]n1,student[i]n2,student[i]n3,student[i]n4,student[i]n5,student[i]n6,student[i]n7,student[i]n8,student[i]n9);
}
printf("存了“%d”条记录到%s\n",man,str);
fclose(cj);
}
else
return;
}
void print(void)
{
int i;
for(i=0;i<72;i++)
printf("");
printf("\n");
printf(" | 学号 姓名 1 2 3 4 5 6 7 8 9 平均分 总分 | \n");
for(i=0;i<man;i++)
{
printf(" | %10s %-6s %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d | \n",student[i]id,student[i]name,student[i]n1,student[i]n2,student[i]n3,student[i]n4,student[i]n5,student[i]n6,student[i]n7,student[i]n8,student[i]n9,student[i]ping,student[i]zong);
}
for(i=0;i<72;i++)
printf("");
printf("\n");
}
void inquiry(void)
{
int i;
char id[10];
while(1)
{
printf("请输入要查人的学号或名字(输入-1即返回上一级):\n");
scanf("%s",&id);
if(id[0]=='-'&&id[1]=='1')
{
printf("exit\n");
break;
}
else
{
for(i=0;i<man;i++)
{
if(strcmp(student[i]id,id)==0)
{
j=i;
break;
}
if(strcmp(student[i]name,id)==0)
{
j=i;
break;
}
j=-1;
}
if(j==-1)
{
printf("无此人\n");
}
else
{
printf(" | 学号 姓名 1 2 3 4 5 6 7 8 9 总分 平均分 | \n");
printf(" | %10s %-6s %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d | \n",student[j]id,student[j]name,student[j]n1,student[j]n2,student[j]n3,student[j]n4,student[j]n5,student[j]n6,student[j]n7,student[j]n8,student[j]n9,student[i]ping,student[i]zong);
}
}
}
}
void fail(void)
{
int i;
printf("有不及格成绩的学生为:\n");
for(i=0;i<man;i++)
{
if(student[i]n1<60||student[i]n2<60||student[i]n3<60||student[i]n4<60||student[i]n5<60||student[i]n6<60||student[i]n7<60||student[i]n8<60||student[i]n9<60)
{
printf(" | %10s %-6s %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d | \n",student[i]id,student[i]name,student[i]n1,student[i]n2,student[i]n3,student[i]n4,student[i]n5,student[i]n6,student[i]n7,student[i]n8,student[i]n9,student[i]ping,student[i]zong);
}
}
}
void compositor(void)
{
int i,k;
char m;
printf("请选择干什么排序:\n");
printf("1成绩1\n");
printf("2成绩2\n");
printf("3成绩3\n");
printf("4成绩4\n");
printf("5成绩5\n");
printf("6成绩6\n");
printf("7成绩7\n");
printf("8成绩8\n");
printf("9成绩9\n");
printf("0总成绩或平均成绩\n");
scanf("%s",&m);
if(m=='0')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i]zong<student[i+1]zong)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='1')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i]n1<student[i+1]n1)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='2')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i]n2<student[i+1]n2)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='3')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i]n3<student[i+1]n3)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='4')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i]n4<student[i+1]n4)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='5')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i]n5<student[i+1]n5)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='6')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i]n6<student[i+1]n6)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='7')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i]n7<student[i+1]n7)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='8')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i]n8<student[i+1]n8)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='9')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i]n9<student[i+1]n9)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else
printf("无此功能\n");
}
void raise(void)
{
printf("请输入添加人的学号:\n");
scanf("%s",&student[man]id);
printf("请输入添加人的姓名:\n");
scanf("%s",&student[man]name);
printf("请输入添加人的成绩1:\n");
scanf("%d",&student[man]n1);
printf("请输入添加人的成绩2:\n");
scanf("%d",&student[man]n2);
printf("请输入添加人的成绩3:\n");
scanf("%d",&student[man]n3);
printf("请输入添加人的成绩4:\n");
scanf("%d",&student[man]n4);
printf("请输入添加人的成绩5:\n");
scanf("%d",&student[man]n5);
printf("请输入添加人的成绩6:\n");
scanf("%d",&student[man]n6);
printf("请输入添加人的成绩7:\n");
scanf("%d",&student[man]n7);
printf("请输入添加人的成绩8:\n");
scanf("%d",&student[man]n8);
printf("请输入添加人的成绩9:\n");
scanf("%d",&student[man]n9);
student[man]zong=student[man]n1+student[man]n2+student[man]n3+student[man]n4+student[man]n5+student[man]n6+student[man]n7+student[man]n8+student[man]n9;
student[man]ping=student[man]zong/9;
man=man+1;
}
void alter(void)
{
int i;
char id[10];
printf("请输入要修改人的学号:\n");
scanf("%s",&id);
for(i=0;i<man;i++)
{
if(strcmp(student[i]id,id)==0)
{
j=i;
break;
}
j=-1;
}
if(j==-1)
{
printf("无此人\n");
}
else
{
printf("请输入要修改为的学号:\n");
scanf("%s",&student[j]id);
printf("请输入要修改为的姓名:\n");
scanf("%s",&student[j]name);
printf("请输入要修改为的成绩1:\n");
scanf("%d",&student[j]n1);
printf("请输入要修改为的成绩2:\n");
scanf("%d",&student[j]n2);
printf("请输入要修改为的成绩3:\n");
scanf("%d",&student[j]n3);
printf("请输入要修改为的成绩4:\n");
scanf("%d",&student[j]n4);
printf("请输入要修改为的成绩5:\n");
scanf("%d",&student[j]n5);
printf("请输入要修改为的成绩6:\n");
scanf("%d",&student[j]n6);
printf("请输入要修改为的成绩7:\n");
scanf("%d",&student[j]n7);
printf("请输入要修改为的成绩8:\n");
scanf("%d",&student[j]n8);
printf("请输入要修改为的成绩9:\n");
scanf("%d",&student[j]n9);
student[j]zong=student[j]n1+student[j]n2+student[j]n3+student[j]n4+student[j]n5+student[j]n6+student[j]n7+student[j]n8+student[j]n9;
student[j]ping=student[j]zong/9;
}
}
void deletes()
{
int i,k;
char id[10];
printf("请输入要删除人的学号:\n");
scanf("%s",&id);
for(i=0;i<man;i++)
{
if(strcmp(student[i]id,id)==0)
{
j=i;
break;
}
j=-1;
}
if(j==-1)
{
printf("无此人\n");
}
else
{
for(k=j;k<man;k++)
{
student[j]=student[j+1];
j=j+1;
}
man=man-1;
}
}
void menu(void)
{
int i;
printf("\n");
for(i=0;i<10;i++)
printf(" ");
for(i=0;i<60;i++)
printf("");
for(i=0;i<9;i++)
printf(" ");
printf("\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 1显示学生成绩信息 6查询不及格学生信息 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 2按成绩由高到低排序 7修改学生成绩信息 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 3添加学生成绩信息 8读取文件 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 4删除学生成绩信息 9保存文件 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 5查询学生成绩信息 - 另存为 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# +退出 #\n");
for(i=0;i<10;i++)
printf(" ");
for(i=0;i<60;i++)
printf("");
for(i=0;i<9;i++)
printf(" ");
printf("\n");
}
int main(void)
{
char i;
read();
menu();
while(1)
{
printf("请输入要选择的需要功能的序列号(输入0显示菜单):\n");
scanf("%s",&i);
if(i=='1')
{
print();
}
else if(i=='2')
{
compositor();
print();
}
else if(i=='3')
{
raise();
print();
}
else if(i=='4')
{
deletes();
print();
}
else if(i=='5')
{
inquiry();
}
else if(i=='6')
{
fail();
}
else if(i=='7')
{
alter();
print();
}
else if(i=='8')
{
read();
}
else if(i=='9')
{
write();
}
else if(i=='0')
{
menu();
}
else if(i=='+')
{
break;
}
else if(i=='-')
{
save();
}
else
{
printf("无此功能,请重新输入序列号\n");
}
}
return 0;
}
记事本文件:你可以随意起名,但要放在和程序同目录
0615438101 顾佳 44 67 72 60 66 65 93 82 67
0615438103 金一宇 60 77 75 75 78 77 97 74 76
0615438104 李阳涛 50 76 66 73 74 80 92 89 74
0615438105 马凯 66 76 77 66 75 72 95 82 75
0615438106 史超 47 71 65 61 85 72 89 83 70
0615438108 徐磊 60 75 66 80 76 80 92 68 74
0615438109 杨浩 60 81 70 91 83 72 93 72 78
0615438110 于泽 61 75 78 70 87 73 84 92 77
0615438111 张昊 60 71 57 82 72 63 86 38 67
0615438112 张政 60 67 69 80 66 61 87 88 73
0615438114 周艨 61 69 71 38 74 77 76 89 67
0615438131 张楠 86 74 72 90 80 81 97 80 84
0615438132 王凡 29 68 48 35 46 76 88 62 54
真有点累人啊,汗~~~~~~
不过,你的要求这些代码都能满足了,
可能会有点小错误,我这儿也无法验证,总之总体的思路是完全正确的。
#include <stdioh>
#include <stringh> //字符串头文件
#include <windowsh> //Sleep函数的头文件
#include <conioh> //getch函数的头文件
#define N 50
//定义全局变量
//定义学员结构体
typedef struct Student
{
char name[10];//姓名
int NO;//学号
char sex[10];//性别
char subject[20];//专业
int phone;//电话
char jianli[200];//简历
}STU;
//声明这种学员类型的数组
STU stu[N];
//计数器n
int n=0; //代表数组的实际人数
//登录函数
void login()
{
system("color 2A");//定义背景和前景颜色
//登录模块实现代码
char Yonghu[30];
char Mima[30];
for(int i=0;i<3;i++)
{
// 打印登陆界面
Sleep(500);//定时打印
printf("\n\n\t\t\t\t学员管理系统平台\n");
Sleep(500);
printf("\n\t\t用户登陆\n");
Sleep(500);
printf("\n\t\t\t\t用户名:");
gets(Yonghu);
printf("\n\t\t\t\t密码:");
char let=NULL;//定义一个字符变量为空值
int j=0; //代表密码的实际长度
while(j<10 && let!=13)//定义密码长度和当接收的字符不为回车键(回车键的ASCLL码值为13)时
{
let=getch();//获得字符 不显示
if(let!=8)//当接收的字符不为退格键(退格键的ASCLL码值为8)时
{
Mima[j++]=let;//将接收的字符赋给数组Mima并自加一个长度
printf("");
}
else
{
if(j>0)//当密码长度不为0时
{
//删除字符的操作
putchar(8);
putchar(' ');
putchar(8);
Mima[--j]=NULL;//将空值赋给数组Mima并自减一个长度
}
}
}
Mima[--j]=NULL;
putchar(8);//消除因回车键所打印的
putchar(' ');
putchar(8);
putchar('\0');//字符串结束标记
//验证密码
if(strcmp(Yonghu,"姓名")==0 && strcmp(Mima,"123456")==0)//用比较函数判断用户输入的用户名和密码是否正确
{
//调用dos命令清空控制台屏幕
system("cls");
printf("\n\n\n\n\n\t\t\t正在登录菜单界面,请稍候");
for(int i=0;i<=5;i++)
{
Sleep(666);
printf(">>>");
}
for(int i=0;i<=100;i++)
{
system("cls");
//%%为百分号
printf("\n\n\n\n\n\n\n\t\t\t\t正在加载数据中%d%%",i);
}
system("cls");
printf("\n\n\n\n\n\n\n\t\t\t\t加载数据成功,loding\n");
break;//跳出for循环
}
else
{
if(i<2)//用户输入错误不超过2次
{
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n");
Sleep(1000);
printf("\t提示:抱歉,您输入的用户名或密码错误,请重新输入!\n");
}
else//用户3次输入都错误时
{
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n");
Sleep(1000);
printf("\t提示:Sorry,您输入的用户名或密码错误次数太多,请休息一会再来!\n");break;
}
}
Sleep(2000);
//调用dos命令清空控制台屏幕
system("cls");
}
}
//菜单函数
void menu()
{
Sleep(2000);
//调用dos命令清空控制台屏幕
system("cls");
//打印功能菜单界面
Sleep(500);
printf("\n\n\t\t\t\t学员管理系统平台\n");
Sleep(500);
printf("\n\t\t\n");
Sleep(500);
printf("\n\t\t功能菜单:\n\n");
Sleep(1000);
printf("\t\t 1、录入单个学员信息 2、显示所有学员信息\n");
Sleep(1000);
printf("\t\t 3、排序显示学员信息 4、插入单个学员信息\n");
Sleep(1000);
printf("\t\t 5、删除单个学员信息 6、查找单个学员信息\n");
Sleep(1000);
printf("\t\t 7、读取所有学员信息 8、保存所有学员信息\n");
Sleep(1000);
printf("\t\t 9、清空全部学员信息 0、退出学员管理系统\n");
}
//录入函数
void input()
{
int i;
char answer;
do
{
//录入学号
do
{
printf("学号:");
scanf("%d",&stu[n]NO);
// 判断输入格式是否有错
while(stu[n]NO<=0 || stu[n]NO>50)
{
printf("\t提示:输入格式有误,请重新输入!\n");
fflush(stdin); //判断输入其它字符(如:a,b,aa,skd)时报错
printf("学号:");
scanf("%d",&stu[n]NO);
}
//循环遍历输入的学号是否重复
for(i=0;i<n;i++)
{
if(stu[i]NO==stu[n]NO)
{
printf("\t提示:学号重复,请重新输入!\n");
break;
}
}
}while(i<n);
//录入姓名
do
{
printf("姓名:");
scanf("%s",stu[n]name);
//判断输入时姓名是否为空
while(strlen(stu[n]name)==0)
{
printf("\t提示:姓名不能为空,请重新输入!\n");
printf("姓名:");
scanf("%s",stu[n]name);
}
// 判断输入时姓名是否含有数字
for(i=0;i<strlen(stu[n]name);i++)
{
if(stu[n]name[i]>='0'&&stu[n]name[i]<='9')
{
printf("提示:姓名不能含有数字,请重新输入!\n");
break;
}
}
}while(i<strlen(stu[n]name));
//录入性别
do
{
printf("性别");
scanf("%s",stu[n]sex);
}while(i<strlen(stu[n]sex));
//录入专业
do
{
printf("专业");
scanf("%s",stu[n]subject);
}while(i<strlen(stu[n]subject));
//录入联系电话
do
{
printf("电话号码");
scanf("%s",&stu[n]phone);
}while(i<strlen(stu[n]phone));
//录入简历
do
{
printf("简历\n");
scanf("%s",stu[n]jianli);
}while(i<strlen(stu[n]jianli);
n++;//实际的人数自加一次
//判断输入成绩的实际人数是否超出已定内存空间
if(n<N)
{
printf("是否继续录入?(y/n):");
fflush(stdin);//清空缓存
scanf("%c",&answer);
}
else
{
printf("实际人数超出已定存储空间的内存,程序终止!\n");
break;
}
}while(answer=='Y' || answer=='y');
}
//显示函数
void display()
{
//打印表头
printf("\n");
printf("学号\t姓名\t性别\t专业\n");
printf("\n");
//循环打印学员信息
for(int i=0;i<n;i++)
{
printf("%d\t%s\t%2f\t%2f\t%2f\t%2f\t%2f\n",stu[i]NO,stu[i]name,stu[i]sex,stu[i]subject);
printf("\n");
}
printf("\n联系电话\n");
for(int i=0;i<n;i++)
{
printf("%d\n",stu[i]phone);
printf("\n");
}
printf("\n学历\n");
for(int i=0;i<n;i++)
{
printf("%s",stu[i]jianli);
printf("\n");
}
}
//排序函数
void sort()
{
STU temp;//定义临时变量
int i,j;
//冒泡排序
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(stu[j]avg<stu[j+1]avg)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
}
//插入函数
void insert()
{
int i,j;//定义循环变量
STU newStu;//定义实行插入功能时输入的类型
char answer;
printf("单个学员信息的循环插入:\n");
do
{
do
{
printf("学号:");
scanf("%d",&newStuNO);
// 判断输入格式是否有错
while(newStuNO<=0 || newStuNO>50)
{
printf("\t提示:输入格式有误,请重新输入!\n");
fflush(stdin); //判断输入其它字符(如:a,b,aa,skd)时报错
printf("学号:");
scanf("%d",&newStuNO);
}
//循环遍历输入的学号是否重复
for(i=0;i<n;i++)
{
if(stu[i]NO==newStuNO)
{
printf("\t提示:学号重复,请重新输入!\n");
break;
}
}
}while(i<n);
do
{
printf("姓名:");
scanf("%s",&newStuname);
//判断输入时姓名是否为空
while(strlen(newStuname)==0)
{
printf("\t提示:姓名不能为空,请重新输入!\n");
printf("姓名:");
scanf("%s",newStuname);
}
// 判断输入时姓名是否含有数字
for(i=0;i<strlen(newStuname);i++)
{
if(newStuname[i]>='0' && newStuname[i]<='9')
{
printf("提示:姓名不能含有数字,请重新正确输入!\n");
break;
}
}
}while(i<strlen(newStuname));
n++;//实际的人数自加一次
sort();//调用排序函数
//循环遍历找位置
for(i=0;i<n;i++)
{
if(newStuavg>stu[i]avg)
{
j=i;
break;
}
}
//移位
for(i=n;i>j;i--)
{
stu[i]=stu[i-1];
}
stu[j]=newStu;//将newStu插入到j的位置
//判断插入的实际人数是否超出已定内存空间
if(n<N)
{
printf("是否继续插入?(y/n):");
fflush(stdin);//清空缓存
scanf("%c",&answer);
}
else
{
printf("实际人数超出已定存储空间的内存,程序终止!\n");
break;
}
}while(answer=='Y' || answer=='y');
}
//删除函数
void remove()
{
int i,j,no;
char answer;
do
{
printf("请输入要删除学员的学号:");
scanf("%d",&no);
//循环遍历找位置
for(i=0;i<n;i++)
{
if(no==stu[i]NO)
{
j=i;
break;
}
}
//移位
if(i<n)
{
for(i=j;i<n-1;i++)
{
stu[i]=stu[i+1];
}
n--;//实际人数自减一个
printf("\n\n系统在第%d个位置找到了学号为%d的学员!\n",j+1,no);
}
else
{
printf("没有找到您要删除的学员学号,请重新选择功能!\n");
}
//判断是否已经没有可以删除的人数
if(n>0)
{
printf("是否继续删除?(y/n):");
fflush(stdin);//清空缓存
scanf("%c",&answer);
}
else
{
printf("已经没有可以删除的人数了,程序终止!\n");
break;
}
}while(answer=='Y' || answer=='y');
}
//查找函数
void search()
{
int i,no;
char answer;
printf("请输入您要查找学员的学号:");
scanf("%d",&no);
do
{
//循环遍历找位置
for(i=0;i<n;i++)
{
if(stu[i]NO==no)
{
break;
}
}
if(i<n)
{
printf("\n\n系统在第%d个位置找到了学号为%d的学员!\n",i+1,no);
printf("该学员的信息如下:\n");
printf("\n");
printf("学号\t姓名\t成绩一\t成绩二\t成绩三\t平均分\t总分\n");
printf("\n");
printf("%d\t%s\t%2f\t%2f\t%2f\t%2f\t%2f\n",stu[i]NO,stu[i]name,stu[i]score[0],stu[i]score[1],stu[i]score[2],stu[i]avg,stu[i]sum);
printf("\n");
}
else
{
printf("\n提示:对不起,没有找到学号为%d的学员\n",no);
}
//判断是否继续查询
printf("是否继续查询?(y/n):");
fflush(stdin);//清空缓存
scanf("%c",&answer);
}while(answer=='Y' || answer=='y');
}
//读取函数
int read()
{
FILE fp;//定义文件指针变量
fp=fopen("e:\\xueyuanguanlixitongtxt","rt");
int n=fread(stu,sizeof(STU),N,fp);
return n;
}
//保存函数
void save()
{
FILE fp;//定义文件指针变量
fp=fopen("e:\\xueyuanguanlixitongtxt","wb");
fwrite(stu,sizeof(STU),n,fp);
fclose(fp);
printf("已保存在:e:\\xueyuanguanlixitongtxt\n");
printf("\n\n\n\n\n\t\t\t\t保存成功!O(∩_∩)O~\n");
}
//主函数
void main()
{
login();//调用登录函数
int choice,i;//定义用户选择变量
do
{
//显示菜单
menu();
printf("\n\t请选择:");
scanf("%d",&choice); //接受用户选择
switch(choice)
{
case 1:
system("cls"); //清屏
printf("\n单个学员信息的循环录入\n");
input();
display();
system("pause");
break;
case 2:
system("cls");
display();
system("pause"); //暂停一下程序
break;
case 3:
system("cls");
if(n==0)
{
printf("\t\t学员个数为0,无法排序,请先录入!\n");
system("pause");
break;
}
else
{
sort(); ;//调用排序函数
system("pause");
break;
}
case 4:
system("cls");
insert(); //调用插入函数
system("pause");
break;
case 5:
system("cls");
remove(); //调用删除函数
system("pause");
break;
case 6:
system("cls");
search(); //调用查找函数
system("pause");
break;
case 7:
system("cls");
n=read(); //调用读取函数
printf("读取成功!\n");
system("pause");
break;
case 8:
system("cls");
save(); //调用保存函数
system("pause");
break;
case 9:
system("cls");
n=0; //清空学员个数
printf("清空完成!\n");
system("pause");
break;
case 0: //退出程序
system("cls");
for(i=5;i>=0;i--)
{
Sleep(1000);
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\t\t请稍等,还有%d秒推出程序!\n\n\n",i);
}
system("cls");
printf("\n\n\n\n\n\n你已经成功退出程序\n\t\t谢谢使用,欢迎再次登录!\n");
exit(0);
break;
default:
system("cls");
printf("\n\n\n\n\n\t\t请选择0-9之间的数!\n");
system("pause");
}
}while(1);
}
#include <stdioh>
#include <malloch>
#include <stringh>
#include <stdlibh>
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
char name[20];
long int num;
char sex[4];
int age;
char address[30];
double tele_num;
char aihao[20];
struct student next;
};//定义一个结构题
int TOTAL_NUM = 0;//学生总数
struct student head = NULL;
void welcome (); //欢迎界面
void mainmenu (); //主界面
void record (); //记录数据
void insert(struct student stu); //插入数据
void display(struct student stu); //显示一个学生的信息
void displayAll (); //显示所有学生的信息
void query_by_num (); //按学号查询学生信息
void readData (); //读取文件里学生的信息
void writeData (); //向文件写入学生信息
void freeAll (); //清空链表内容
void del (); //删除学生信息
void change (); //更改学生信息
void devise (struct student p); //选择更改内容
int main (void)
{
welcome ();
//显示主菜单
mainmenu ();
return 0;
}
//显示欢迎信息
void welcome ()
{
printf ("+----------------------------------------------------+\n");
printf ("| |\n");
printf ("| 欢迎使用网络工程学院信息安全092班学生信息管理系统 |\n");
printf ("| |\n");
printf ("+----------------------------------------------------+\n");
}
//系统主菜单
void mainmenu ()
{
int choice;
choice = -1;
readData ();
printf ("\n温馨提示:为保证您的操作得到保存,请按正常顺序退出系统^_^\n");
do
{
printf ("\n\n\n");
printf ("\t\t\t--------------------------------------------\n");
printf ("\t\t\t+ 信息安全092班学生信息管理系统 |\n");
printf ("\t\t\t--------------------------------------------\n");
printf ("\t\t\t+ [1]----录入学生信息 |\n");
printf ("\t\t\t+ [2]----浏览学生信息 |\n");
printf ("\t\t\t+ [3]----查询学生信息 |\n");
printf ("\t\t\t+ [4]----删除学生信息 |\n");
printf ("\t\t\t+ [5]----修改学生信息 |\n");
printf ("\t\t\t+ [0]----退出系统 |\n");
printf ("\t\t\t+··············|\n");
printf ("\t\t\t--------------------------------------------\n");
printf ("请输入您的选择:");
scanf ("%d", &choice);
switch (choice)
{
case 0:
writeData ();
freeAll ();
exit (0);
case 1:
record ();
break;
case 2:
displayAll ();
break;
case 3:
query_by_num ();
break;
case 4:
del ();
break;
case 5:
change ();
break;
default:
printf ("\n无效选项!");
break;
}
}
while (choice != 0);
}
//录入学生信息
void record ()
{
struct student p0;
p0 = (struct student )malloc(LEN);
printf ("请输入学生的姓名:");
scanf ("%s",p0->name);
printf ("请输入学生的学号:");
scanf ("%ld",&p0->num);
printf ("请输入学生的性别:");
scanf ("%s",p0->sex);
printf ("请输入学生的年龄:");
scanf ("%d",&p0->age);
printf ("请输入学生的地址:");
scanf ("%s",p0->address);
printf ("请输入学生的电话:");
scanf ("%lf",&p0->tele_num);
printf ("请输入学生的爱好:");
scanf ("%s",p0->aihao);
insert (p0);
printf ("该学生的信息为:\n");
printf ("-------------------------------------------------------------------------------\n");
printf ("姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n");
display (p0);
}
void insert (struct student stu)
{
struct student p0, p1, p2;
p1 = head;
p0 = stu;
if (head == NULL)
{
head = p0;
p0->next = NULL;
}
else
{
while ((p0->num > p1->num)&&(p1->next != NULL))
{
p2 = p1;
p1 = p1->next;
}
if (p0->num <= p1->num)
{
if (head == p1)
head = p0;
else
p2->next = p0;
p0->next = p1;
}
else
{
p1->next = p0;
p0->next = NULL;
}
}
TOTAL_NUM++;
}
void display (struct student p)
{
printf ("%s\t%ld\t%d\t%s\t%s\t\t%0f\t%s\n", p->name, p->num, p->age, p->sex, p->address, p->tele_num, p->aihao);
}
//浏览学生信息
void displayAll()
{
struct student p;
printf("学生总数:%d\n", TOTAL_NUM);
p = head;
if (head != NULL)
{
printf("\n姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n");
printf("-------------------------------------------------------------------------------\n");
do
{
display(p);
p = p->next;
}
while(p != NULL);
}
printf ("\n");
}
//按学号查询学生信息
void query_by_num ()
{
int num;
struct student p1;
printf("请输入学生的学号:");
scanf("%ld", &num);
if(head==NULL)
{
printf("无学生记录!\n");
return;
}
p1 = head;
while (num!=p1->num && p1->next!=NULL)
p1 = p1->next;
if (num == p1->num)
{
printf ("姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n");
printf ("-------------------------------------------------------------------------------\n");
display (p1);
}
else
printf ("没有该学生记录,请核对!");
}
//写入文件
void writeData ()
{
FILE fp;//文件指针
struct student p;
fp = fopen("1txt", "w");
if (!fp)
{
printf("文件打开错误!");
return;
}
fprintf(fp,"%d\n", TOTAL_NUM);
for(p = head; p!= NULL; p= p->next)
{
fprintf(fp,"%s\t%ld\t%s\t%d\t%s\t%0f\t%s\n", p->name, p->num, p->sex, p->age, p->address, p->tele_num, p->aihao);
}
fclose (fp);
}
void freeAll ()
{
struct student p1, p2;
p1 = p2=head;
while(p1)
{
p2=p1->next;
free (p1);
p1 = p2;
}
}
//读取文件
void readData ()
{
FILE fp;//文件指针
struct student p1, p2;
fp = fopen("1txt", "r");
if (!fp)
{
printf("文件打开错误!");
return;
}
fscanf(fp,"%d\n", &TOTAL_NUM);
head = p1 = p2 = (struct student )malloc(LEN);
fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao);
while(!feof(fp))
{
p1 = (struct student )malloc(LEN);
fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao);
p2->next = p1;
p2 = p1;
}
p2->next = NULL;
fclose(fp);
}
//删除学生信息
void del ()
{
struct student p1, p2;
long int num;
if (head == NULL)
{
printf("无学生记录!\n");
return;
}
printf("请输入您要删除的学生的学号:");
scanf("%ld", &num);
p1 = head;
while (num != p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
{
if(p1 == head)
head = p1->next;
else p2->next = p1->next;
free(p1);
TOTAL_NUM--;
}
else
printf("没有该学生记录,请核对!\n");
}
//修改学生信息
void change ()
{
struct student p1, p2;
long int num;
if (head == NULL)
{
printf ("无学生记录!\n");
return;
}
printf ("请输入您要修改的学生的学号:");
scanf ("%ld", &num);
p1 = head;
while (num != p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
devise (p1);
else
printf("没有该学生记录,请核对!\n");
}
void devise (struct student p)
{
int choice;
choice = -1;
do
{
printf("请选择您要修改的学生的信息内容:\n");
printf("+----------------------+\n");
printf("| 姓名 请按 1 |\n");
printf("| 学号 请按 2 |\n");
printf("| 性别 请按 3 |\n");
printf("| 年龄 请按 4 |\n");
printf("| 地址 请按 5 |\n");
printf("| 电话 请按 6 |\n");
printf("| 爱好 请按 7 |\n");
printf("| 取消 请按 0 |\n");
printf("+----------------------+\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice)
{
case 0:
return;
case 1:
printf("请输入新姓名:");
scanf("%s", p->name);
break;
case 2:
printf("请输入新学号:");
scanf("%d", &p->num);
break;
case 3:
printf("请输入新性别:");
scanf("%s", p->sex);
break;
case 4:
printf("请输入新年龄:");
scanf("%s", &p->age);
break;
case 5:
printf("请输入新地址:");
scanf("%s", p->address);
break;
case 6:
printf("请输入新电话:");
scanf("%lf", &p->tele_num);
break;
case 7:
printf("请输入新爱好:");
scanf("%s", p->aihao);
break;
default:
printf("\n无效选项!");
break;
}
}
while(choice != 0);
}
/
学生管理系统
/
#include
#include
#include
#include
typedef
struct
Day{
int
year;
int
mon;
int
day;
}
DAY;
typedef
struct
std_info
{
int
num;
char
name[81];
int
age;
int
gender;
DAY
birthday;
char
address[256];
unsigned
long
phonenumber;
char
Email[256];
}
STD_DATE;
typedef
struct
node{
STD_DATE
student;
struct
node
next;
}
LINK_LIST;
LINK_LIST
Creatnode(LINK_LIST
head)
{
LINK_LIST
p,newnode;
p=head;
newnode=(LINK_LIST)malloc(sizeof(LINK_LIST));
printf("学号:");
scanf("%d",&newnode->studentnum);
while
(p)
{
if
(p->studentnum==newnode->studentnum)
{
printf("输入学号重复,请重新输入\n");
p=head;
printf("学号:");
scanf("%d",&newnode->studentnum);
continue;
}
p
=p->next;
}
printf("姓名:");
fflush(stdin);
gets(newnode->studentname);
printf("年龄:");
scanf("%d",&newnode->studentage);
printf("性别(1、男,2、女)选择1或2:");
scanf("%d",&newnode->studentgender);
printf("出生年月(YYYY-MM-DD):");
scanf("%d-%d-%d",&newnode->studentbirthdayyear,
&newnode->studentbirthdaymon,
&newnode->studentbirthdayday);
fflush(stdin);
printf("地址:");
gets(newnode->studentaddress);
printf("电话号码:");
scanf("%lu",&newnode->studentphonenumber);
fflush(stdin);
printf("E-mail:");
gets(newnode->studentEmail);
return
newnode;
}
LINK_LIST
CreatLink()
{
LINK_LIST
head=NULL,Linkend=NULL,p=NULL;
int
n,i;
printf("请输入需要录入的学生人数\n");
scanf("%d",&n);
for
(i=0;inext=p;
}
else
{
head=p;
}
Linkend=p;
if
(Linkend!=NULL)
{
Linkend->next=NULL;
}
}
return
head;
}
void
printfnode(LINK_LIST
thenode)
{
if
(thenode==NULL)
{
printf("该信息为空\n");
return;
}
printf("学
号:%d\n",thenode->studentnum);
printf("姓
名:%s\n",thenode->studentname);
printf("年
龄:%d\n",thenode->studentage);
if
(thenode->studentgender==1)
{
printf("性
别:男\n");
}
else
printf("性
别:女\n");
printf("出生年月:%d年%d月%d日\n",thenode->studentbirthdayyear,
thenode->studentbirthdaymon,
thenode->studentbirthdayday);
printf("地
址:%s\n",thenode->studentaddress);
printf("电话号码:%lu\n",thenode->studentphonenumber);
printf("E-mail:%s\n",thenode->studentEmail);
return;
}
void
findnode(LINK_LIST
head)
{
int
type=0;
int
number=0;
char
name[81]={0};
LINK_LIST
p;
p=head;
if
(p==NULL)
{
printf("请先录入学生信息\n");
return;
}
printf("请选择查询方式\n(1、按学号\n2、按姓名):");
scanf("%d",&type);
if
(type==1)
{
printf("请输入学号:");
scanf("%d",&number);
while
(p)
{
if
(p->studentnum==number)
{
printfnode(p);
return;
}
p=p->next;
}
printf("没有找到该学号学生信息\n");
return;
}
else
if
(type==2)
{
printf("请输入学生姓名:");
fflush(stdin);
gets(name);
while
(p)
{
if
(strcmp(p->studentname,name)==0)
{
printfnode(p);
return;
}
p=p->next;
}
printf("没有找到该%s的学生信息\n",name);
}
return;
}
void
printfList(LINK_LIST
head)
{
LINK_LIST
p;
p=head;
int
i=0;
if
(p==NULL)
{
printf("请先录入学生信息\n");
return;
}
while
(p)
{
printf("\n第%d位学生:\n",++i);
printfnode(p);
p=p->next;
}
return;
}
int
Insertnode(LINK_LIST
head)
{
LINK_LIST
p,newnode=NULL;
p=head;
if
(p==NULL)
{
printf("请先录入学生信息\n");
return
0;
}
newnode=Creatnode(head);
while
(p->next)
{
p=p->next;
}
newnode->next=p->next;
p->next=newnode;
return
1;
}
int
copystd_date(STD_DATE
dest,STD_DATE
source)
{
dest->num=source->num;
memset(dest->name,0,81);
memset(dest->address,0,256);
memset(dest->Email,0,256);
strcpy(dest->name,source->name);
strcpy(dest->address,source->address);
strcpy(dest->Email,source->Email);
dest->age=source->age;
dest->birthdayyear=source->birthdayyear;
dest->birthdaymon=source->birthdaymon;
dest->birthdayday=source->birthdayday;
dest->gender=source->gender;
dest->phonenumber=source->phonenumber;
return
1;
}
int
Deletenode(LINK_LIST
head,LINK_LIST
delnode)
{
LINK_LIST
p,del;
del=delnode;
p=delnode->next;
if
(del==NULL)
{
printf("要删除的信息不存在\n");
return
0;
}
if
(p==NULL)
{
p=head;
while
(p->next!=delnode)
{
p=p->next;
}
p->next=NULL;
free(del);
del=NULL;
return
1;
}
del->next=p->next;
copystd_date(&del->student,&p->student);
free(p);
p=NULL;
return
1;
}
void
Deletestd(LINK_LIST
head)
{
LINK_LIST
p;
int
num=0;
int
i=0;
p=head;
printf("请输入要删除第几个学生:");
scanf("%d",&num);
for
(i=0;inext;
}
if
(p)
{
Deletenode(head,p);
printf("删除成功\n");
}
else
printf("没有找到该学生");
return;
}
void
title()
{
printf("\n");
printf("
学
生
管
理
系
统
\n");
printf("
请选择(1~6):
\n");
printf("
1、输入学生信息
\n");
printf("
2、查询信息
\n");
printf("
3、浏览学生信息
\n");
printf("
4、插入学生信息
\n");
printf("
5、删除学生信息
\n");
printf("
6、退出系统
\n");
printf("\n");
return
;
}
int
main()
{
int
num=0;
int
findnum=0;
LINK_LIST
head=NULL;
LINK_LIST
p=NULL;
while
(1)
{
title();
scanf("%d",&num);
switch(num)
{
case
1:
head=CreatLink();
break;
case
2:
findnode(head);break;
case
3:
printfList(head);break;
case
4:
Insertnode(head);break;
case
5:
Deletestd(head);
break;
case
6:
goto
end;
break;
default:break;
}
printf("\n请按回车键继续\n");
fflush(stdin);
getchar();
system("cls");
}
end:
while
(head)
{
p=head;
head=head->next;
free(p);
p=NULL;
}
return
0;
}
用c语言编写学生信息管理系统
本文2023-11-22 21:42:33发表“资讯”栏目。
本文链接:https://www.lezaizhuan.com/article/532285.html