学生信息管理系统

来源:互联网 发布:手机淘宝所在地怎么改 编辑:程序博客网 时间: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