/**************************************************/ *版权所有(c)2015,linli; *文件名称:xueshengguanlixitong *文件标识:无 *内容摘要:该代码用于获取满足后缀要求的第一个文件 *其他说明:无 *当前版本:v1.0 *作者:林莉 *完成日期:20151225 * *修改记录1: *修改日期:20151225 *版本号:v1.0 *修改人:Lin Li *修改内容:创建 ****************************************************** #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #define N 1000 typedef struct student { int number; char name[20]; int grade; int math; int english; int jisuanji; int sum; }STUDENT; STUDENT student[N]; int amount=0; void function(); //功能 void creat(); //创建; void delet(); //删除 void search(); //查找 void PaiXu(); //排序 void LiuLan(); //浏览 void save(); //保存 void out(); //导出 void menu(); void menu() { int n=0; system("CLS"); printf(" 学生信息管理系统\n"); printf(" 作者:林莉\n"); printf("-------------------MENU-----------------\n"); printf(" 1.登记学生信息\n"); printf(" 2.删除学生信息\n"); printf(" 3.浏览所有已经登记的学生\n"); printf(" 4.查找\n"); printf(" 4.1按学号查找\n"); printf(" 4.2按姓名查找\n"); printf(" 4.3按成绩查找\n"); printf(" 5.根据总成绩排序\n"); printf(" 6.存储到文件\n"); printf(" 7.从文件导出\n"); printf(" 8.退出系统\n"); a: printf(" 请选择:"); scanf("%d",&n); switch (n) { case 1: creat();break; case 2: delet();break; case 3: LiuLan();break; case 4: search();break; case 5: PaiXu();break; case 6: save();break; case 7: out();break; case 8: exit(0);break; default: { printf("请输入1-8之间的数字,谢谢!\n"); goto a; } } } int main() { menu(); return 0; } /***********************************************************************/ *功能描述:判断是否需要下一步操作 /***********************************************************************/ void function() { char biaozhi[20]; printf("\n"); printf("还需要操作么?如果需要操作请输入:y,否则请输入:n\n"); scanf("%s",biaozhi); if(strcmp(biaozhi,"y")==0) { menu(); } else if(strcmp(biaozhi,"n")==0) exit(0); else { printf("请输入正确的字符,谢谢!\n"); function(); } } /***************************************************/ *功能描述:输入学生学号、姓名及各科成绩等信息 *输入参数:number-学生学号 name-学生姓名 student[i].math-数学成绩 student[i].english-英语成绩 student[i].jisuanji-计算机成绩 *输出参数: *返回值: *其他说明:消息字段之间用分号(;)分隔 ****************************************************/ void creat() { int rs; int i,k=1; system("cls"); printf("请输入需要输入几个学生信息:"); scanf("%d",&rs); for(i=amount;i<amount+rs;i++,k++) { printf("请输入第%d个学生的学号:",k); scanf("%d",&student[i].number); printf("请输入学生的姓名:\n"); scanf("%s",student[i].name); printf("请输入学生3门课的成绩:\n"); printf("请输入第1门课的成绩:\n"); scanf("%d",&student[i].math); printf("请输入第2门课的成绩:\n"); scanf("%d",&student[i].english); printf("请输入第3门课的成绩:\n"); scanf("%d",&student[i].jisuanji); } amount=amount+rs; function(); } /********************************************************************************/ *功能描述:根据输入要删除的学号,删除相应学生的姓名、学号、各科成绩等 *输入参数:number-学生学号 *输出参数: *返回值: *其他说明:消息字段之间用分号(;)分隔 *********************************************************************************/ { char deletinfo[10]; system("CLS"); printf("删除全部学生信息请输入\"all\",删除指定学号的学生信息请输入\"one\"\n"); scanf("%s",deletinfo); if(strcmp(deletinfo,"all")==0) { int j; printf("你删除的学生信息如下:\n"); printf("-----------学号-------------姓名-------------高数--------------英语--------------计算机\t\n"); for(j=0;j<amount;j++) printf("----%d-------%s-------%d-------%d-------%d\t\n",student[j].number,student[j].name,student [j].math,student[j].jisuanji); amount=0; printf("删除成功\n\n"); } else if(strcmp(deletinfo,"one")==0) { struct student *p=NULL; int choice; int i,j,k=0; printf("请输入你要删除的人的学号:"); scanf("%d",&choice); for(i=0;i<amount;i++) { if(choice==student[i].number) { k=1;j=i;break; } } if(k) { if(amount==1) { p=&student[0]; //free(p); //shuliang=0; } else { for(i=j;i<amount;i++) { student[i]=student[i+1]; } amount=amount-1; } printf("删除成功\n\n"); } else { printf("输入数据错误!\n"); } } function(); } /********************************************************************************/ *功能描述:读取学生姓名、学号、各科成绩等信息; *输入参数: *输出参数:学生信息 *返回值: *其他说明:消息字段之间用分号(;)分隔 /********************************************************************************/ void LiuLan() { int i; system("cls"); if(amount==0) { printf("系统里面没有任何学生的信息!\n"); } else { for(i=0;i<amount;i++) { printf("第%d个学生的学号为:%d\n",i+1,student[i].number); printf("第%d个学生的姓名为:%s\n",i+1,student[i].name); printf("第%d个学生的第一门课的成绩为:%d\n",i+1,student[i].math); printf("第%d个学生的第二门课的成绩为:%d\n",i+1,student[i].english); printf("第%d个学生的第三门课的成绩为:%d\n",i+1,student[i].jisuanji); student[i].sum=student[i].math+student[i].english+student[i].jisuanji; printf("第%d个学生的总成绩为:%d\n",i+1,student[i].sum); } } function(); } /********************************************************************************/ *功能描述:根据输入学生姓名或学号或各科成绩等信息来查找学生的全部信息; *输入参数:number-学生学号 name-学生姓名 student[i].math-数学成绩 student[i].english-英语成绩 student[i].jisuanji-计算机成绩 *输出参数: *返回值: *其他说明:消息字段之间用分号(;)分隔 /********************************************************************************/ void search() { int xx; char choice,yy[20]; int i,j,k=0; system("cls"); if(amount==0) { printf("系统里面没有任何学生的信息!\n"); function(); } printf("三种查找方式:学号,姓名,成绩\n"); printf("如果按学号查找请输1,如果按姓名查找请输2,如果按成绩查找请输3\n"); printf("请输入您查找的方式:"); scanf("%s",&choice); if(choice=='1') { printf("请输入需要查找学生的学号:"); scanf("%d",&xx); printf("您所查找的学生的信息为:\n"); printf("----学号----姓名----高数成绩----英语成绩----计算机成绩----\t\n"); for(i=0;i<amount;i++) { if(xx==student[i].number) { j=i;k=1; printf("----%d-------%s-------%d-------%d-------%d----\t\n",student[j].number,student [j].name,student[j].math,student[j].english,student[i].jisuanji); } } if(k==0) printf("输入信息有误:\n"); } else if(choice=='2') { printf("请输入需要查找学生的姓名:\n"); scanf("%s",yy); printf("您所查找的学生的信息为:\n"); printf("----学号----姓名----高数成绩----英语成绩----计算机成绩----\t\n"); for(i=0;i<amount;i++) { if(strcmp(yy,student[i].name)==0) { j=i;k=1; printf("----%d-------%s-------%d-------%d-------%d----\t\n",student[j].number,student [j].name,student[j].math,student[j].english,student[j].jisuanji); } } if(k==0) printf("输入信息有误:\n"); } else if(choice=='3') { printf("请输入需要查找学生的成绩:\n"); scanf("%d",&xx); printf("您所查找的学生的信息为:\n"); printf("----学号----姓名----高数----英语----计算机----\t\n"); for(i=0;i<amount;i++) { if(xx==student[i].grade) { j=i;k=1; printf("----%d-------%s-------%d-------%d-------%d----\t\n",student[j].number,student [j].name,student[j].math,student[j].english,student[i].jisuanji); } } if(k==0) printf("输入信息有误:\n"); } function(); } /********************************************************************************/ *功能描述:根据输入学生的各科成绩来排序 *输入参数:student[i].math-数学成绩 student[i].english-英语成绩 student[i].jisuanji-计算机成绩 *输出参数: *返回值: *其他说明:消息字段之间用分号(;)分隔 /********************************************************************************/ void PaiXu() { struct student *p1[N],**p2,*temp; int i,j; system("cls"); p2=p1; for( i=0;i<amount;i++) { p1[i]=student+i; } for( i=0;i<amount;i++) { for( j=i+1;j<amount;j++) { if((*(p2+i))->sum<(*(p2+j))->sum) {temp=*(p2+i);*(p2+i)=*(p2+j);*(p2+j)=temp;} } } printf("按照总成绩排序之后的信息为:\n"); printf("----学号----姓名----总成绩----\t\n"); for( i=0;i<amount;i++) { student[i].sum=student[i].math+student[i].english+student[i].jisuanji; printf("----%d-----%s----%d-----\n",(*(p2+i))->number,(*(p2+i))->name,(*(p2+i))->sum); } function(); } /********************************************************************************/ *功能描述:将学生数据保存至某一文件中 *输入参数: *输出参数: *返回值: *其他说明:消息字段之间用分号(;)分隔 /********************************************************************************/ void save() { int i; FILE *rs; if((rs=fopen("student.txt","w"))==NULL) { printf("not open"); exit(0); } for(i=0;i<amount;i++) { fwrite(&student[i], sizeof(student[i]), 1, rs); } if(ferror(rs)) { fclose(rs); perror("写文件失败!\n"); return; } printf("存储文件成功!\n"); fclose(rs); function(); } /********************************************************************************/ *功能描述:从文件中将学生信息读取出来 *输入参数: *输出参数: *返回值: *其他说明:消息字段之间用分号(;)分隔 /********************************************************************************/ void out() { struct student t; int i=0; FILE* fp = fopen("student.txt", "r"); amount=0; if(NULL==fp) { perror("读取文件打开失败!\n"); return; } memset(student,0x0,sizeof(student)); while(1) { fread(&t,sizeof(t),1,fp); if(ferror(fp)) { fclose(fp); perror("读文件过程失败!\n"); return; } if(feof(fp)) { break; } student[i]=t; i++; } fclose(fp); amount=i; printf("导出文件成功!\n"); function(); }
运行结构: