学生信息管理系统
来源:互联网 发布:手机淘宝所在地怎么改 编辑:程序博客网 时间:2024/05/29 16:31
读入文档未完成,是个败点
/****************************************************** File name:学生信息管理系统 // 文件名 Author: Sno:1508010317 class:软工1503 Date:2017.3.19 // 作者及完成日期 Description: 1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。 2.将功能补充完全(基于文件处理,完成刷新和保存功能)。 3.将学生信息改为更好的数据组织,而非离散形式(结构体)。 提高要求: 可将程序中的不足(如数据验证)等根据自己的能力与理解完成。 Function List: // 主要函数及其功能 1、menu(); //界面函数 2、insert(STUDENTS t[]); //输入函数 3、list(STUDENTS t[],int n); //显示函数 4、search(STUDENTS t[],int n);//查询函数 5、del(STUDENTS t[],int n); //删除函数 6、save(STUDENTS t[],int n); //保存函数 7、modify(STUDENTS t[],int n);//修改函数 8、load(STUDENTS t[]); //加载函数 9、help(); //帮助函数 10、find_name(STUDENTS t[],int n,char *s); //姓名查找函数 11、find_code(STUDENTS t[],int n,char *no);//学号查找函数 12、sort(STUDENTS t[],int n); //排序函数 History: // 历史修改记录 <author> <time> <desc> 2017.3.19 增加加载函数失败 不能实现读取文件信息 2017.3.19 增加排序函数,成功实现*************************************************/
#include <stdio.h> /**I/O函数**/#include <stdlib.h> /**标准库函数**/#include <string.h> /**字符串函数**/#define N 50 /**最大学生人数**/typedef struct {char code[20]; /**学号**/char name[20]; /**姓名**/char sex[5]; /**性别**/int age; /**年龄**/float score0; /**C语言成绩**/ float score1; /**高数成绩**/ float score2; /**英语成绩**/} STUDENTS;/**定义数据结构**/
/*****以下所有函数******/int menu(); /**界面函数**/int insert(STUDENTS t[]); /**输入函数**/void list(STUDENTS t[],int n); /**显示函数**/void search(STUDENTS t[],int n);/**查询函数**/int del(STUDENTS t[],int n); /**删除函数**/void save(STUDENTS t[],int n); /**保存函数**/void modify(STUDENTS t[],int n);/**修改函数**/int load(STUDENTS t[]); /**加载函数**/void help(); /**帮助函数**/int find_name(STUDENTS t[],int n,char *s); /**姓名查找函数**/int find_code(STUDENTS t[],int n,char *no);/**学号查找函数**/void sort(STUDENTS t[],int n); /**排序函数**/
/********界面函数********/int menu(){int c;printf(" ******************************************************\n");printf(" * 学生信息管理系统 *\n");printf(" ******************************************************\n"); printf(" *******************系统功能菜单***********************\n");printf(" ---------------------- ------------------------- \n");printf(" ********************************************* \n");printf(" * 0.系统帮助及说明 * * 1.加载学生信息 * \n");printf(" ********************************************* \n"); printf(" * 2.查询学生信息 * * 3.修改学生信息 * \n");printf(" ********************************************* \n");printf(" * 4.增加学生信息 * * 5.按学号删除信息 * \n");printf(" ********************************************* \n");printf(" * 6.显示当前信息 * * 7.保存信息到文件 * \n");printf(" ********************************************* \n");printf(" * 8.退出系统 * * 9.按学号排序 * \n");printf(" ********************************************* \n");printf(" ---------------------- ------------------------ \n");do{printf("\n 输入您的菜单选项编号(0-9):");scanf("%d",&c);}while(c<0 || c>9);return c;}
/********帮助函数********/void help(){ system("cls"); /**清屏**/printf("\n0.欢迎使用系统帮助!\n");printf("\n1.初次进入系统后,请先选择 4 增加学生信息;\n");printf("\n2.按照菜单提示键入数字代号;\n");printf("\n3.增加学生信息后,切记按 7 保存;\n");printf("\n4.谢谢您的使用!\n");getchar();}
/*******增加函数********/int insert(STUDENTS t[]){int i,n;system("cls");/**清屏**/printf("\n 请输入待增加学生人数:\n");scanf("%d",&n);printf("请输入学生记录:\n");printf("学生学号 学生姓名 性别 年龄 C语言成绩 高等数学 大学英语成绩\n");printf("....................................................................\n");for(i=0;i<n;i++){scanf("%s",t[i].code); /**输入学号**/scanf("%s",t[i].name); /**输入姓名**/scanf("%s",t[i].sex); /**输入性别**/scanf("%d",&t[i].age); /**输入年龄**/scanf("%f",&t[i].score0); /**C语言成绩**/scanf("%f",&t[i].score1); /**高数成绩**/scanf("%f",&t[i].score2); /**英语成绩**/}getchar();return n; }
/**查找函数**/void search(STUDENTS t[],int n){char s[21]; /**以姓名和学号最长长度+1为准**/system("cls"); /**清屏**/int i,item; printf("----------------------\n");printf("-----1.按学号查询-----\n");printf("-----2.按姓名查询-----\n");printf("-----3.退出本菜单-----\n");printf("----------------------\n");while(1){printf("请选择子菜单编号:");scanf("%d",&item);switch(item){case 1:printf("请输入查找的学号:\n"); /**学号查找**/scanf("%s",s);getchar();i=find_code(t,n,s); /**将学号查找函数返回值赋给i**/if(i>n-1)printf("没有学号为%s的学生! \n",s);else{printf("学生学号 学生姓名 性别 年龄 C语言成绩 高等数学 大学英语成绩\n");printf("%6s %10s %6s %6d %9.1f %10.1f %10.1f\n",t[i].code,t[i].name,t[i].sex,t[i].age,t[i].score0,t[i].score1,t[i].score2);}break;case 2:printf("请输入查找的姓名:\n"); /**姓名查找**/scanf("%s",s);getchar();i=find_name(t,n,s); /**将姓名查找函数返回值赋给i**/if(i>n-1)printf("没有姓名为%s的学生! \n",s);else{printf("学生学号 学生姓名 性别 年龄 C语言成绩 高等数学 大学英语成绩\n");printf("%6s %10s %6s %6d %9.1f %10.1f %10.1f\n",t[i].code,t[i].name,t[i].sex,t[i].age,t[i].score0,t[i].score1,t[i].score2);}break;case 3:return; /**返回界面函数**/default:printf("请在1-3之间选择\n");}}}
/**按姓名查找函数,参数为学生数组和学生总数以及姓名s**/int find_name(STUDENTS t[],int n,char *s){int i;for(i=0;i<n;i++){if(strcmp(s,t[i].name)==0) /**比较两者是否相等,相等则返回0**/return i;}return i;}
/**按学号查找函数,参数为学生数组和学生总数以及学号no**/int find_code(STUDENTS t[],int n,char *no){int i;for(i=0;i<n;i++){if(strcmp(no,t[i].code)==0) /**比较两者是否相等,相等则返回0**/return i;}return i;}
/**修改学生信息函数**/void modify(STUDENTS t[],int n){char s1[21]; /**以姓名和学号最长长度+1为准**/int ch=0;int i,item;system("cls"); /**清屏**/printf("请输入要修改的学生学号:\n");scanf("%s",s1);for(i=0;i<n;i++)if(strcmp(t[i].code,s1)!=0){printf("没有找到学号为%s的学生!\n",s1);}else{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");printf("学号为%s的学生修改前:\n",s1);printf("学生学号 学生姓名 性别 年龄 C语言成绩 高等数学 大学英语成绩\n");printf("%6s %7s %6s %6d %9.1f %10.1f %10.1f\n",t[i].code,t[i].name,t[i].sex,t[i].age,t[i].score0,t[i].score1,t[i].score2);while(1){printf("请选择子菜单编号:");scanf("%d",&item);switch(item){case 1:printf("请输入新的姓名:\n");scanf("%s",t[i].name);break;case 2:printf("请输入新的年龄:\n");scanf("%d",&t[i].age);break;case 3:printf("请输入新的性别:\n");scanf("%s",t[i].sex);break;case 4:printf("请输入新的C语言成绩:\n");/**C语言成绩**/scanf("%f",&t[i].score0); break;case 5:printf("请输入新的高等数学成绩:\n"); /**高数成绩**/scanf("%f",&t[i].score1); break;case 6:printf("请输入新的大学英语成绩:\n");/**英语成绩**/scanf("%f",&t[i].score2);break;case 7:return;getchar();default:printf("请在1-7之间选择\n");}}}}
/**删除函数,参数是结构体数组,记录数**/int del(STUDENTS t[],int n){char s[21];int ch=0;int i;system("cls"); /**清屏**/printf("请输入要删除的学生学号:\n");scanf("%s",s);getchar();i=find_code(t,n,s);if(i==n)printf("没有学号为%s的学生! \n",s);else{printf("正在删除中! \n");for(;i<n;i++){strcpy(t[i].name,t[i+1].name);strcpy(t[i].code,t[i+1].code);strcpy(t[i].sex,t[i+1].sex);t[i].age=t[i+1].age;t[i].score0=t[i+1].score0;t[i].score1=t[i+1].score1;t[i].score2=t[i+1].score2;}n--;printf("删除成功! \n");}getchar();return n;}
/**显示信息,参数为记录数组和总人数**/void list(STUDENTS t[],int n){int i;system("cls");printf("****************************学生清单********************************\n");printf("学生学号 学生姓名 性别 年龄 C语言成绩 高等数学 大学英语成绩\n");printf("--------------------------------------------------------------------\n");for(i=0;i<n;i++){printf("%6s %10s %6s %6d %9.1f %10.1f %10.1f\n",t[i].code,t[i].name,t[i].sex,t[i].age,t[i].score0,t[i].score1,t[i].score2);}printf("--------------------------------------------------------------------\n");getchar();}
/****保存函数,参数为结构体数组和总人数****/void save(STUDENTS t[],int n){int i;FILE * fp ; /**指向文件的指针**/system("cls");if((fp=fopen("017.txt","w"))==NULL) /**打开文件,并判断打开是否正常**/{printf("无法打开学生记录文件! \n"); /**打开失败**/exit(1); /**退出**/}printf("\n正在保存中\n");fprintf(fp,"%d",n); /**将记录数写入文件**/fprintf(fp,"\r\n"); /**将换行符号写入文件**/for(i=0;i<n;i++){fprintf(fp,"%6s %10s %6s %6d %9.1f %10.1f %10.1f",t[i].code,t[i].name,t[i].sex,t[i].age,t[i].score0,t[i].score1,t[i].score2);fprintf(fp,"\r\n"); /**将换行符号写入文件**/}fclose(fp); /**关闭文件**/getchar();printf("--------保存成功---------\n"); /**显示保存成功**/}
/**加载函数,读入参数,参数为结构体数组**/int load(STUDENTS t[]){int i,n;system("cls");FILE * fp;if((fp=fopen("017.txt","r"))==NULL) /**打开文件**/{printf("无法打开学生信息文件! \n"); /**打开失败**/exit(1); /**退出**/}fscanf(fp,"%d",&n); /**读入记录数**/for(i=0;i<n;i++){/**按格式读入记录**/fscanf(fp,"%6s %10s %6s %6d %9.1f %10.1f %10.1f",t[i].code,t[i].name,t[i].sex,&t[i].age,&t[i].score0,&t[i].score1,&t[i].score2);}fclose(fp); /**关闭文件**/printf("已经成功加载学生信息文件! \n"); /**显示保存成功**/getchar();return n;}
/**排序函数**/void sort(STUDENTS t[],int n){int i,j,p1,p2,p3,p4;system("cls");STUDENTS temp;for(i=0;i<n-1;i++){for(j=n-1;j>i;j--)if((strcmp(t[j-1].code,t[j].code))>0) /**比较学号大小**/{/**交换学号**/strcpy(temp.code,t[j-1].code); strcpy(t[j-1].code,t[j].code);strcpy(t[j].code,temp.code);/**交换姓名**/strcpy(temp.name,t[j-1].name);strcpy(t[j-1].name,t[j].name);strcpy(t[j].name,temp.name);/**交换性别**/strcpy(temp.sex,t[j-1].sex);strcpy(t[j-1].sex,t[j].sex);strcpy(t[j].sex,temp.sex);/**交换年龄**/p1=t[j-1].age;t[j-1].age=t[j].age;t[j].age=p1;/**交换C成绩**/p2=t[j-1].score0;t[j-1].score0=t[j].score0;t[j].score0=p2;/**交换高数成绩**/p3=t[j-1].score1;t[j-1].score1=t[j].score1;t[j].score1=p2;/**交换英语成绩**/p4=t[j-1].score2;t[j-1].score2=t[j].score2;t[j].score2=p2;}}printf("排序成功! \n");getchar();}
/******主函数******/int main(){STUDENTS stu[N]; /**定义结构体数组**/int length; /**定义学号姓名等长度**/for(;;) /**无限循环**/{switch(menu()) /**调用界面函数,返回值作为开关语句的条件**/{case 0:help();break; /**显示操作步骤**/case 1:load(stu);break; /**加载到内存**/case 2:search(stu,length);break; /**按姓名查找记录**/case 3:modify(stu,length);break; /**按学号修改记录**/case 4:length=insert(stu);break; /**输入记录**/case 5:length=del(stu,length);break; /**按姓名删除记录**/case 6:list(stu,length);break; /**显示全部记录**/case 7:save(stu,length);break; /**保存文件**/case 8:exit(0); /**程序结束**/case 9:sort(stu,length);break; /**排序**/}getchar();printf("按回车键返回主菜单...\n"); /**提示信息**/}return 0;}
1 0
- 学生信息管理系统
- 学生学籍信息管理系统
- 学生信息管理系统
- 学生信息管理系统
- 学生成绩信息管理系统
- 学生信息管理系统
- 【学生信息管理系统 总结】
- 学生信息管理系统--毕业论文
- 学生信息管理系统
- 学生信息管理系统
- 学生信息管理系统~~~~~
- 学生信息管理系统
- 学生信息管理系统总结
- 学生信息管理系统
- 学生信息管理系统
- 学生信息管理系统
- netbeans 学生信息管理系统
- 学生信息管理系统
- HDU 5381 The sum of gcd
- Spring框架学习(10):基于注解的方式配置Bean
- linux初学 unit13
- CSS实现三角形的方法之一--利用 border 属性实现三角形
- 大数据处理思路与mysql分区1
- 学生信息管理系统
- HDU1134 Game of Connections
- 第九单元练习题
- 函数linspace生成按等差形式排列的行向量
- java面向对象第6章 异常1
- R语言数据可视化:ggplot2中的qplot()函数
- 关闭回显
- 多线程中的单例模式
- Fabric架构解析