C语言实现 学生信息管理系统

xiaoxiao2021-02-27  492

//*********学生信息管理系统*********** //作者:王敏 //版本:v1.0 //创建时间:2017年3月19日 //主要功能:完善学生信息管理系统,利用结构体统一数据,完成信息刷新和保存功能 // //************************************ #include<stdio.h> /*I/O函数*/ #include<stdlib.h> /*其它说明*/ #include<string.h> /*字符串函数*/ #define LEN 30 /* 学号和姓名最大字符数*/ #define N 10 /* 最大学生人数,实际请更改*/ struct Student/*结构体*/ { char * code[LEN]; /*学号*/ char * name[LEN]; /*姓名*/ int age[N]; /* 年龄*/ char *sex[N]; /* 性别*/ float score[N][3]; /* 3门课程成绩*/ }stu[N]; int k=1,n=0, m=0;/* n代表当前记录的学生人数*/ void seek(); void help(); void modify(); void insert(); void del(); void save(); void newl(); void display(); void menu(); int main() { while(k) { menu(); } system("pause"); return 0; } void help()/*系统帮助*/ { printf("\n 1.欢迎使用系统帮助! \n"); printf("\n 2.初次进入系统后,请先选择增加学生信息! \n"); printf("\n 3.按照菜单提示键入数字代号. \n"); printf("\n 4.增加学生信息后,切记保! \n"); printf("\n 5.谢谢您的使用! \n"); } void newl()/*实现信息刷新*/ { int i; FILE *fp; if((fp=fopen("stu.dat","rb"))==NULL) { printf("can not open file\n"); exit(0); } for(i=0;i<N;i++) { fread(&stu[i],sizeof(struct Student),1,fp); printf("%6s %7s m l %9.1f .1f .1f\n",stu->code[i],stu->name[i],stu->age[i],stu->sex[i],stu->score[i][0],stu->score[i][1],stu->score[i][2]); } fclose(fp); } void save() /*信息保存*/ { int i; FILE *fp; if((fp=fopen("stu.dat","wb"))==NULL) { printf("cannot open file\n"); return ; } for(i=0;i<N;i++) if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1) printf("file write error\n"); fclose(fp); } 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(stu->code[i],s1)==0) { flag=1; printf("学生学号 学生姓名 年龄 性别 C语言成绩 高等数学 大学英语成绩\n"); printf("--------------------------------------------------------------------\n"); printf("%6s %7s m l %9.1f .1f .1f\n",stu->code[i],stu->name[i],stu->age[i], stu->sex[i],stu->score[i][0],stu->score[i][1],stu->score[i][2]); } if(0==flag) printf("该学号不存在!\n"); break; case 2: printf("请输入要查询的学生的姓名:\n"); scanf("%s",s1); for(i=0;i<n;i++) if(strcmp(stu->name[i],s1)==0) { flag=1; printf("学生学号 学生姓名 年龄 性别 C语言成绩 高等数学 大学英语成绩\n"); printf("--------------------------------------------------------------------\n"); printf("%6s %7s m l %9.1f .1f .1f\n",stu->code[i],stu->name[i],stu->age[i], stu->sex[i],stu->score[i][0],stu->score[i][1],stu->score[i][2]); } if(0==flag) printf("该姓名不存在!\n"); break; case 3:return; default:printf("请在1-3之间选择\n"); } } } void modify() /*修改信息*/ { int i,item,num; 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->code[i],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->name[num],s2); break; case 2: printf("请输入新的年龄:\n"); scanf("%d",stu->age[num]);break; case 3: printf("请输入新的性别:\n"); scanf("%c",&sex1); stu->sex[num]=sex1; break; case 4: printf("请输入新的C语言成绩:\n"); scanf("%f",&score1); stu->score[num][0]=score1; break; case 5: printf("请输入新的高等数学成绩:\n"); scanf("%f",&score1); stu->score[num][1]=score1; break; case 6: printf("请输入新的大学英语成绩:\n"); scanf("%f",&score1); stu->score[num][2]=score1; break; case 7: return; default:printf("请在1-7之间选择\n"); } } } 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->code[j-1],stu->code[j])>0) { strcpy(temp,stu->code[j-1]); strcpy(stu->code[j-1],stu->code[j]); strcpy(stu->code[j],temp); strcpy(temp,stu->name[j-1]); strcpy(stu->name[j-1],stu->name[j]); strcpy(stu->name[j],temp); ctemp=stu->sex[j-1]; stu->sex[j-1]=stu->sex[j]; stu->sex[j]=ctemp; p=&stu->age[j-1]; q=&stu->age[j]; s=*q; *q=*p; *p=s; for(k=0;k<3;k++) { ftemp=stu->score[j-1][k]; stu->score[j-1][k]=stu->score[j][k]; stu->score[j][k]=ftemp; } } } } void insert() /*插入函数*/ { int j=n; printf("请输入待增加的学生数:\n"); scanf("%d",&m); do { stu->code[j]=(char *)malloc(30); stu->name[j]=(char *)malloc(30); printf("请输入第%d 个学生的学号:\n",j-n+1); scanf("%s",stu->code[j]); printf("请输入第%d 个学生的姓名:\n",j-n+1); scanf("%s",stu->name[j]); printf("请输入第%d 个学生的年龄:\n",j-n+1); scanf("%d",&stu->age[j]); printf("请输入第%d 个学生的性别:\n",j-n+1); scanf(" %s",&stu->sex[j]); printf("请输入第%d 个学生的C语言成绩\n",j-n+1); scanf("%f",&stu->score[j][0]); printf("请输入第%d 个学生的高等数学成绩:\n",j-n+1); scanf("%f",&stu->score[j][1]); printf("请输入第%d 个学生的大学英语成绩:\n",j-n+1); scanf("%f",&stu->score[j][2]); j++; }while(j<n+m); n+=m; printf("信息增加完毕!\n\n"); sort(); } void del() { int i,j,flag=0; char s1[LEN+1]; printf("请输入要删除学生的学号:\n"); scanf("%s",s1); for(i=0;i<n;i++) if(strcmp(stu->code[i],s1)==0)/*将输入的学号与已有的学号相比较,当二者相同时返回0*/ { flag=1; for(j=i;j<n-1;j++)/*进行删除学号,姓名,性别,成绩操作*/ stu->code[j]=stu->code[j+1]; stu->name[j]=stu->name[j+1]; stu->age[j]=stu->age[j+1]; stu->sex[j]=stu->sex[j+1]; stu->score[j][0]=stu->score[j+1][0]; stu->score[j][1]=stu->score[j+1][1]; stu->score[j][2]=stu->score[j+1][2]; } if(flag==0) printf("该学号不存在!\n"); if(flag==1) { printf("删除成功,显示结果请选择菜单\n"); n--; } } void display()/*显示当前已有信息*/ { int i; printf("共有%d位学生的信息:\n",n); if(0!=n) { printf("学生学号 学生姓名 年龄 性别 C语言成绩 高等数学 大学英语成绩\n"); printf("--------------------------------------------------------------------\n"); for(i=0;i<n;i++) { printf("%7s %7s m l %9.1f .1f .1f\n",stu->code[i],stu->name[i],stu->age[i],stu->sex[i],stu->score[i][0],stu->score[i][1],stu->score[i][2]); } } } void menu()/* 界面*/ { int num; printf(" \n\n \n\n"); printf(" ******************************************************\n\n"); printf(" * 学生信息管理系统 *\n \n"); printf(" ******************************************************\n\n"); printf("*********************系统功能菜单************************* \n"); printf(" ---------------------- ---------------------- \n"); printf(" ********************************************* \n"); printf(" * 1.系统帮助及说明 * * 2.刷新学生信息 * \n"); printf(" ********************************************* \n"); printf(" * 3.查询学生信息 * * 4.修改学生信息 * \n"); printf(" ********************************************* \n"); printf(" * 5.增加学生信息 * * 6.按学号删除信息 * \n"); printf(" ********************************************* \n"); printf(" * 7.显示当前信息 * * 8.保存当前学生信息* \n"); printf(" ********************** ********************** \n"); printf(" * 9.退出系统 * \n"); printf(" ********************** \n"); printf(" ---------------------- ---------------------- \n"); printf("请选择菜单编号:"); scanf("%d",&num); switch(num)/*利用switch分支结构调用各部分功能函数*/ { case 1:help();break; case 2:newl();break; case 3:seek();break; case 4:modify();break; case 5:insert();break; case 6:del();break; case 7:display();break; case 8:save();break; case 9:k=0;break; default:printf("请在1-9之间选择\n"); } }
转载请注明原文地址: https://www.6miu.com/read-538.html

最新回复(0)