精华内容
下载资源
问答
  • c语言基于链表和文件操作的学生综合信息管理系统

    该系统是以工程为基础的,每个#include”head.h”后面请自己新建工程内源文件,程序有3个数据文件DataInformation.txt(学生信存储文件)&&student_UserInformation.txt(学生用户登录数据文件例:学号:140101密码123456)&&teacher_UserInformation.txt(教师信息数据文件例:用户名:admin 密码admin)
    头文件的声明:
    #include

    include

    include

    include

    struct student{
        char stu_major[15];     //专业
        int stu_class;          //班级
        int stu_ID;             //班级内ID
        char stu_name[20];
        int score_math,score_english,score_c;
        int score_ave;
        int ME;                 //Mutual evaluation(同学互评)
        int CE;                 //The counselor evaluation(辅导员评价)
        int TM_all;             //教师评价总分
        int ZH_score;           //综合总分
        struct student *next;
    };
    
        //声明函数
        FILE *openfile(char *fileaddress,char *openmode);
    
        int  Login(void);//登录函数
    
        void Teacher_Main(void);//教师函数
    
        void Student_Main(int stu_ID,int stu_class);//学生函数
    
        student *NewLinkList(void);//新建链表
    
        void DisplayStudent(void);//展示全部学生信息
    
        void AddNewStudent();//新增学生信息
    
        student *FindStudent(int stu_ID,int stu_class);//查找学生
    
        void DeleteStudent(void);//删除学生信息并将删除后全部学生信息保存进文件
    
        student *Rank(struct student *head);//排序
    
        void Change(void);  //修改学生信息函数
    
        void ClassMate(int stu_ID,int stu_class);   //同学互评
    
        void ModifyPassword(int ID);//密码修改函数

    下面是全部程序

    #include"head.h"
    void main(){
    system("title 学生综合信息管理系统V1.0  —— 吴银制作");//设置标题
    system("mode con cols=130 lines=75");//设置窗口大小
    
    int size=sizeof(student);
    int LoginResult=Login();
    switch(LoginResult){
    case -1:{//进入教师端
    Teacher_Main();
    break;
       }
    case 0:{
       printf("账户,密码验证错误次数太多系统已退出!");
       break;
       }
    default:{//进入学生端
    int stu_ID,stu_class;
    stu_class=LoginResult/100;
    stu_ID=(LoginResult-stu_class*100);
    Student_Main(stu_ID,stu_class);
    break;
    }
    }
    getchar();
    getchar();
    }
    
    
    /*该函数用于系统登录,教师登录成功后返回1,学生登录成功后返回学号,
    若多次密码验证后未成功登录则返回0。
    */
    
    //分别是教师密码验证函数和学生密码验证函数,这两个函数均有返回值,
    //若账户和密码通过验证均返回1,否则0
    #include"head.h"
    int teacher_user(char name[],char password[]);
    int student_user(int stu_ID,int password);
    
    //登录器主函数
    int Login(){
    printf("\t欢迎使用学生综合信息管理系统\n");
    printf("   请选择登录类型...\n\tA.教师登录\t\t其他.学生登录\n");
    char choice;
    int result;//int型返回值,教师返回-1,学生返回学号,输入错误返回0
    choice=getchar();
    if(choice=='A'||choice=='a'){
    char UserName[20],UserPassword[7];//定义密码和用户名
    for(int i=1;i<=3;i++){
    printf("请输入用户名:");
    scanf("%s",UserName);
    printf("请输入密码:");
    scanf("%s",UserPassword);
    printf("\n");
    if(teacher_user(UserName,UserPassword)==1){//调用教师密码验证函数并判断返回值
    printf("教师端登录成功...\n");
    result=-1;//教师端返回-1
    break;
    }
    else{
    printf("用户名,密码错误。\n");
    result=0;//登录错误返回0
    }
    }
    return result;
    }
    else{
    int UserName,Password;
    for(int i=1;i<=3;i++){
    printf("学号:");
    scanf("%d",&UserName);
    printf("密码:");
    scanf("%d",&Password);
    if(student_user(UserName,Password)==1){
    printf("学生端登录成功.\n");
    result=UserName;//学生端返回学号
    break;
    }else{
    printf("用户名,密码错误。\n");
    result=0;
    }
    }
    } 
    return result;
    }
    //教师密码验证器
    int teacher_user(char name[],char password[]){
    FILE *fp;
    char UserName[20],UserPassword[7];
    fp=openfile("teacher_UserInformation.txt","a+");
    //遍历文件中存储的账户和密码,并验证是否通过参数传递过来的账户密码是否正确
    while(1){
    fscanf(fp,"%s%s",UserName,UserPassword);
    if((strcmp(UserName,name)==0)&&(strcmp(UserPassword,password)==0)){
    return 1;
    break;
    }
    }
    return 0;
    }
    //学生密码验证器
    int student_user(int stu_ID,int password){
    FILE *fp=openfile("student_UserInformation.txt","a+");
    int UserName,UserPassword;
    //遍历文件中存储的账户和密码,并验证是否通过参数传递过来的账户密码是否正确
    while(!feof(fp)){//feof()是个陷阱函数,该函数会导致文件最后一条数据被多读取一次
    fscanf(fp,"%d%d",&UserName,&UserPassword);
    if((UserName==stu_ID)&&(password==UserPassword)){
    return 1;
    break;
    }
    }
    return 0;
    }
    
    /*
    学生信息新增函数,用于录入一个或多个学生信息并直接存入学生信息存储文件
    */
    #include"head.h"
    
    void AddNewStudent(){
    
    char name[20],major[15];
    int stu_class,stu_ID,count=0;
    
    struct student *head,*ptr,*p,*temp;
    
    head=NewLinkList();
    ptr=head;
    p=head->next;
    
    temp=(struct student *)malloc(sizeof(student));  
    temp->next=NULL;
    
    while(NULL!=ptr->next)//遍历链表,找到链尾
    {
    ptr=ptr->next;
    }
    
    ptr->next = (struct student *)malloc(sizeof(student));              //默认在链表末追加添加信息  
    ptr = ptr->next;  
    ptr->next = NULL; 
    
    for(int i=1;i<2;i++){
    
    printf("请输入学生基本信息...\n专业\t班级\t学号\t姓名\n");
    scanf("%s%d%d%s",major,&stu_class,&stu_ID,name);
    
    //判断该学生是否存在
    while(p!=NULL){
    if(((strcmp(p->stu_major,major)==0)&&(p->stu_class==stu_class)&&(p->stu_ID==stu_ID)))
    {
    
    count++;
    break;
    }
    p=p->next;
    }
    if(count!=0){printf("该学生已存在!\n"); break;}//若计数器不为0则说明该学生已经存在
    
    printf("高数\t英语\tc语言\t 导员评分 教师评分\n");
    scanf("%d%d%d%d%d",&temp->score_math,&temp->score_english,&temp->score_c,&temp->CE,&temp->TM_all);
    temp->ME=0;
    
    if(((0>=temp->score_math)||(temp->score_math>=100))||((0>=temp->score_english)||(temp->score_english>=100))||((0>=temp->score_c)||(temp->score_c>=100)))
    {//判断输入的成绩是否合法(大于等于0&&小于等于100printf("成绩不能小于0或大于100!\n");
    }else{
    
    ptr->stu_class=stu_class;
    ptr->stu_ID=stu_ID;
    strcpy(ptr->stu_major,major);
    strcpy(ptr->stu_name,name);
    
    ptr->score_math=temp->score_math;
    ptr->score_english=temp->score_english;
    ptr->score_c=temp->score_c;
    ptr->ME=temp->ME;
    ptr->CE=temp->CE;
    ptr->TM_all=temp->TM_all;
    //通过前面输入的数据计算出该学生的平均分,和综合总分
    ptr->score_ave=(temp->score_math+temp->score_english+temp->score_c)/3;
    ptr->ZH_score=ptr->score_ave*7/10+(temp->CE+temp->ME+temp->TM_all)/10;
    
    //将该学生的学号存储到学生用户文件中以供该学生登录学生端是进行密码验证
    {
    FILE *fp2=openfile("student_UserInformation.txt","a");
    fprintf(fp2,"%d\t%d\n",(stu_class*100+stu_ID),123456);
    }
    
    head=head->next; 
    head=Rank(head);//对新增学生信息后的链表按学号排序
    
    
    /*将更改后的信息存储在文件中*/
    FILE *fp=openfile("DataInformation.txt","w+");
    ptr=head;  
    while( ptr != NULL )  
       {  
          fprintf(fp,"%s\t%d\t%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",
    ptr->stu_major,ptr->stu_class,ptr->stu_ID,ptr->stu_name,ptr->score_math,
    ptr->score_english,ptr->score_c,ptr->score_ave,
    ptr->ME,ptr->CE,ptr->TM_all,ptr->ZH_score);
    
        ptr = ptr->next;  
     }  
    printf("新增学生成功!\n");
    fclose(fp);
    }
    }
    }
    
    #include"head.h"
    void Change(void){
    struct student *head,*p,*ptr;
    int stu_ID,stu_class;
    printf("请输入您要修改学生的班级和学号:");
    scanf("%d%d",&stu_class,&stu_ID);
    head=NewLinkList();
    p=head->next;
    while(p!=NULL){
    if((p->stu_ID==stu_ID)&&(p->stu_class==stu_class)){
    printf("请输入%s基本信息...\n专业\t班级\t学号\t姓名\t高数\t英语\tc语言 导员评分 教师评分\n",p->stu_name);
    printf("%s\t%d\t%d\t%s\t",p->stu_major,p->stu_class,p->stu_ID,p->stu_name);
    scanf("%d%d%d%d%d",&p->score_math,&p->score_english,&p->score_c,&p->CE,&p->TM_all);
    
    p->score_ave=(p->score_math+p->score_english+p->score_c)/3;
    p->ZH_score=p->score_ave*7/10+(p->CE+p->ME+p->TM_all)/10;
    break;
    }else{
    p=p->next;
    }
    }
    head=head->next;
    head=Rank(head);//对新增学生信息后的链表按学号排序
    
    ptr=head;  
    FILE *fp=openfile("DataInformation.txt","w+");
    ptr=head;  
        while( ptr != NULL )  
        {  
     fprintf(fp,"%s\t%d\t%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",
    ptr->stu_major,ptr->stu_class,ptr->stu_ID,ptr->stu_name,ptr->score_math,
    ptr->score_english,ptr->score_c,ptr->score_ave,
    ptr->ME,ptr->CE,ptr->TM_all,ptr->ZH_score);
    
            ptr = ptr->next;  
        }
    fclose(fp);
    }
    
    //同学互评函数,可对全班同学评价,也可更加输入的学号进行单个学生评价
    #include"head.h"
    void ClassMate(int stu_ID,int stu_class)//函数参数是登录了学生端学生的学号和班级用于判断是否同班和,不对自己进行评价
    {
    struct student *head,*p,*ptr;
    int ME=0,choice;
    
    head=NewLinkList();//新建链表
    p=head;
    printf("\t对全班同学进行评价请输入0\n\t\t输入学号对评价某个同学进行评价\n请输入...");
    scanf("%d",&choice);
    switch(choice){
    case 0://对全部学生评价
    {
       printf("请输入您对同学的评价...\n");
    printf("姓名\t学号\t同学互评成绩\n");
    while(p!=NULL)
    {
    if(p->stu_class==stu_class)//查找是否一个班级
    {
    if(p->stu_ID!=stu_ID)
    {
    printf("%s\t%d",p->stu_name,p->stu_ID);//输出一个班级且不是本人的学生姓名和学号
    scanf("%d",&ME);//输入评价
    if(p->ME==0){//判断之前是否有人对学生进行评价若无则第一个评价直接是学生总评价
    p->ME=ME+100;
    p->ZH_score=p->score_ave*7/10+(p->CE+p->ME+p->TM_all)/10;
    }else{//若之前同学互评不为0,则去前数和输入数的平均值
    p->ME=((p->ME/100)*(p->ME-(p->ME/100)*100)+ME)/(p->ME/100+1)+((p->ME/100+1)*100);
    p->ZH_score=p->score_ave*7/10+(p->CE+p->ME+p->TM_all)/10;
    }
    }
    }
    p=p->next;
    }
    break;
       } 
    default:{//对某个学号的同学评价
    int count=0;
    while(p!=NULL){
    if((p->stu_class==(choice/100))&&(p->stu_ID==(choice-(choice/100)*100)))
    {
     printf("请输入您对同学的评价...\n");
     printf("姓名\t学号\t同学互评成绩\n");
     printf("%s\t%d",p->stu_name,p->stu_ID);
         scanf("%d",&ME);
     /*学生评价是取多人评价平均数,p->ME是储存的人数和之前的平均数信息后两位数值是之前所求得得平均数下次使用时*/
    if(p->ME==0){
    p->ME=ME+100;
    p->ZH_score=p->score_ave*7/10+(p->CE+(p->ME-p->ME/100*100)+p->TM_all)/10;
    count++;
    }else{
    p->ME=((p->ME/100)*(p->ME-(p->ME/100)*100)+ME)/(p->ME/100+1)+((p->ME/100+1)*100);
    p->ZH_score=p->score_ave*7/10+(p->CE+(p->ME-p->ME/100*100)+p->TM_all)/10;
    count++;//计数器用来记录是否有查找到学生,查找到学生计数器加一
    }
    } 
    p=p->next;
    }
    if(count==0)printf("未找到该学生!");
    break ;
    }
    }
    
    
    /*将更改后的信息存储在文件中*/
    FILE *fp=openfile("DataInformation.txt","w+");
    ptr=head->next;  
        while( ptr != NULL )  
        {  
     fprintf(fp,"%s\t%d\t%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",
    ptr->stu_major,ptr->stu_class,ptr->stu_ID,ptr->stu_name,ptr->score_math,
    ptr->score_english,ptr->score_c,ptr->score_ave,
    ptr->ME,ptr->CE,ptr->TM_all,ptr->ZH_score);
    
            ptr = ptr->next;  
        }  
    fclose(fp);
    }
    
    //函数用于删除一条学生信息
    #include"head.h"
    void DeleteStudent(void){
    struct student *head,*ptr1,*ptr2,*p;
    head=NewLinkList();//新建链表
    
    int stu_ID,stu_class;
    printf("请输入您要删除的学生班级和学号:");
    scanf("%d%d",&stu_class,&stu_ID);
    
    //要被删除的为空节点
    while(head!=NULL&&((head->stu_ID==stu_ID)&&(head->stu_class=stu_class)))
    {
    ptr2=head;
    head=head->next;
    free(ptr2);
    }
    if(head==NULL)
    printf("链表为空!");
    //要被删除的为非表头节点
    ptr1=head;
    ptr2=head->next;/*从表头的下一个结点搜索所有符合删除要求的结点*/
    while(ptr2!=NULL)
    {
    if((ptr2->stu_ID==stu_ID)&&(ptr2->stu_class=stu_class))/*ptr2所指结点符合删除要求*/
    {
    ptr1->next=ptr2->next;
    printf("已成功删除该学生信息!\n");
    free(ptr2);
    }else
    ptr1=ptr2;/*ptr1后移一个结点*/
    ptr2=ptr1->next;/*ptr2指向ptr1的后一个结点*/
    }
    ptr2=head;
    head=head->next;//将链表表头后移一个结点
    free(ptr2);
    head=Rank(head);//调用排序函数对链表结点排序
    FILE *fp=openfile("DataInformation.txt","w+");
    p=head;
    //将修改后的链表信息保存到文件
    while(p!=NULL)
    {
     fprintf(fp,"%s\t%d\t%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",
     p->stu_major,p->stu_class,p->stu_ID,p->stu_name,p->score_math,
     p->score_english,p->score_c,p->score_ave,p->ME,p->CE,p->TM_all,p->ZH_score);
     p=p->next;
    }
    fclose(fp);
    free(head);
    }
    
    /*
    该函数用于根据用户选择按一定顺序对学生信息排序显示
    */
    #include"head.h"
    void all_student(void);//显示全部学生信息
    void Choice_print(void);//按需显示学生信息
    void DisplayStudent(void){
    int choice;
    printf("\t1.显示全部学生信息\n\t2.按成绩排序显示\n请输入您的选择...");
    scanf("%d",&choice);
    switch(choice){
    case 1:{
    all_student();
    break;
       }
    case 2:{
       Choice_print();
       break;
       }
    default:{
    printf("输入错误!\n");
    }
    }
    } 
    void all_student(void){
    FILE *fp=openfile("DataInformation.txt","a+");
    struct student *temp;
    char major[20],name[15];
    
    temp=(struct student *)malloc(sizeof(struct student));//给临时容器申请一个空间
    
    fscanf(fp,"%s%d%d%s%d%d%d%d%d%d%d%d",//使用fscanf从文件中读取一行数据
    major,&temp->stu_class,&temp->stu_ID,name,//在while外读取一次是为了使feof()能正常工作
    &temp->score_math,&temp->score_english,&temp->score_c,//因为feof会在文件读取完了下一次读取时才返回1
    &temp->score_ave,&temp->ME,&temp->CE,&temp->TM_all,&temp->ZH_score);
    strcpy(temp->stu_major,major);
    strcpy(temp->stu_name,name);
    printf("专业\t班级\t学号\t姓名\t高数\t英语\tc语言 平均分 同学互评 导员评分 教师评分 综合得分\n");
    while(!feof(fp)){
    printf("%s\t%d\t%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",
    temp->stu_major,temp->stu_class,temp->stu_ID,temp->stu_name,
    temp->score_math,temp->score_english,temp->score_c,
    temp->score_ave,(temp->ME-temp->ME/100*100),temp->CE,temp->TM_all,temp->ZH_score);
    
    fscanf(fp,"%s%d%d%s%d%d%d%d%d%d%d%d",
    major,&temp->stu_class,&temp->stu_ID,name,
    &temp->score_math,&temp->score_english,&temp->score_c,
    &temp->score_ave,&temp->ME,&temp->CE,&temp->TM_all,&temp->ZH_score);
    strcpy(temp->stu_major,major);
    strcpy(temp->stu_name,name);
    }
    
    }
    void Choice_print(void){
    
    struct student *head,*ptr,*qtr,*temp;
    temp=(struct student *)malloc(sizeof(student));//定义空的链表节点来当做排序时临时容器,链表下一节点为空节点
    temp->next=NULL;
    int len=0;//链表长度 
    int i,j;//ij循环次数控制参数  
    
    head=NewLinkList();
    
    ptr=head->next;  
    while(ptr != NULL)             //测链表长度,不包括表头结点  
    {  
    ptr=ptr->next;  
    len++;  
    }  
    ptr=head->next;//指针ptr用过之后记得回原位  
    
    printf("\t1.根据高数排序\n\t2.根据英语排序\n\t3.根据c语言排序\n请输入您的选择...");
    int choice;
    scanf("%d",&choice);//获取用户选择
    printf("序号\t专业\t班级\t学号\t姓名\t高数\t英语\tc语言\t平均分\t同学互评 导员评分 教师评分 综合得分\n");
    switch(choice){
    case 1:{
    //冒泡排序算法开始
    for( i=0;i<len;i++)  
      {  
    qtr=head->next;           //每一次内循环之后,ptrqtr必然在最后两个节点上
           ptr=head->next->next;    //故在进行内循环之前,要重新复位ptrqtr
    for( j=0;j<len-i-1;j++)  
       {  
      if(  (ptr->score_math > qtr->score_math)&&(ptr->stu_class==qtr->stu_class) )  
    {  
     // 进行数据交换
                        strcpy(temp->stu_major,qtr->stu_major);
    strcpy(temp->stu_name,qtr->stu_name);
    temp->stu_ID=qtr->stu_ID;
    temp->stu_class=qtr->stu_class;
    temp->score_math=qtr->score_math;
    temp->score_english=qtr->score_english;
    temp->score_c=qtr->score_c;
    temp->score_ave=qtr->score_ave;
    temp->ME=qtr->ME;
    temp->CE=qtr->CE;
    temp->TM_all=qtr->TM_all;
    temp->ZH_score=qtr->ZH_score;
    
    strcpy(qtr->stu_major,ptr->stu_major);
    strcpy(qtr->stu_name,ptr->stu_name);
    qtr->stu_ID=ptr->stu_ID;
    qtr->stu_class=ptr->stu_class;
    qtr->score_math=ptr->score_math;
    qtr->score_english=ptr->score_english;
    qtr->score_c=ptr->score_c;
    qtr->score_ave=ptr->score_ave;
    qtr->ME=ptr->ME;
    qtr->CE=ptr->CE;
    qtr->TM_all=ptr->TM_all;
    qtr->ZH_score=ptr->ZH_score;
    
    strcpy(ptr->stu_major,temp->stu_major);
    strcpy(ptr->stu_name,temp->stu_name);
    ptr->stu_ID=temp->stu_ID;
    ptr->stu_class=temp->stu_class;
    ptr->score_math=temp->score_math;
    ptr->score_english=temp->score_english;
    ptr->score_c=temp->score_c;
    ptr->score_ave=temp->score_ave;
    ptr->ME=temp->ME;
    ptr->CE=temp->CE;
    ptr->TM_all=temp->TM_all;
    ptr->ZH_score=temp->ZH_score;
    
                    }  
                    qtr = qtr->next;  
                    ptr = ptr->next;  
                }  
            }  
    ptr=head->next;  
    int m=1;
    //将获得的按一定顺序降序排列后的学生信息进行显示
        while(ptr!= NULL )  
        {   
    if(ptr==NULL)break;
            printf(" %d\t%s\t%d\t%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",
    m,ptr->stu_major,ptr->stu_class,ptr->stu_ID,ptr->stu_name,
    ptr->score_math,ptr->score_english,ptr->score_c,ptr->score_ave,
    (ptr->ME-ptr->ME/100*100),ptr->CE,ptr->TM_all,ptr->ZH_score);
            ptr = ptr->next;  
    m++;
    
        }
    break;
       }
    case 2:{
      //冒泡排序算法开始
    for( i=0;i<len;i++)  
      {  
    qtr=head->next;           //每一次内循环之后,ptrqtr必然在最后两个节点上
           ptr=head->next->next;    //故在进行内循环之前,要重新复位ptrqtr
    for( j=0;j<len-i-1;j++)  
       {  
      if(  (ptr->score_english > qtr->score_english)&&(ptr->stu_class==qtr->stu_class) )  
    {  
                        strcpy(temp->stu_major,qtr->stu_major);
    strcpy(temp->stu_name,qtr->stu_name);
    temp->stu_ID=qtr->stu_ID;
    temp->stu_class=qtr->stu_class;
    temp->score_math=qtr->score_math;
    temp->score_english=qtr->score_english;
    temp->score_c=qtr->score_c;
    temp->score_ave=qtr->score_ave;
    temp->ME=qtr->ME;
    temp->CE=qtr->CE;
    temp->TM_all=qtr->TM_all;
    temp->ZH_score=qtr->ZH_score;
    
    strcpy(qtr->stu_major,ptr->stu_major);
    strcpy(qtr->stu_name,ptr->stu_name);
    qtr->stu_ID=ptr->stu_ID;
    qtr->stu_class=ptr->stu_class;
    qtr->score_math=ptr->score_math;
    qtr->score_english=ptr->score_english;
    qtr->score_c=ptr->score_c;
    qtr->score_ave=ptr->score_ave;
    qtr->ME=ptr->ME;
    qtr->CE=ptr->CE;
    qtr->TM_all=ptr->TM_all;
    qtr->ZH_score=ptr->ZH_score;
    
    strcpy(ptr->stu_major,temp->stu_major);
    strcpy(ptr->stu_name,temp->stu_name);
    ptr->stu_ID=temp->stu_ID;
    ptr->stu_class=temp->stu_class;
    ptr->score_math=temp->score_math;
    ptr->score_english=temp->score_english;
    ptr->score_c=temp->score_c;
    ptr->score_ave=temp->score_ave;
    ptr->ME=temp->ME;
    ptr->CE=temp->CE;
    ptr->TM_all=temp->TM_all;
    ptr->ZH_score=temp->ZH_score;
    
                    }  
                    qtr = qtr->next;  
                    ptr = ptr->next;  
                }  
            }  
    ptr=head->next;  
    int m=1;
        while(ptr!= NULL )  
        {   
    if(ptr==NULL)break;
            printf(" %d\t%s\t%d\t%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",
    m,ptr->stu_major,ptr->stu_class,ptr->stu_ID,ptr->stu_name,
    ptr->score_math,ptr->score_english,ptr->score_c,ptr->score_ave,
    (ptr->ME-ptr->ME/100*100),ptr->CE,ptr->TM_all,ptr->ZH_score);
            ptr = ptr->next;  
    m++;
    
        }
    break;
       }
    case 3:{
           //冒泡排序算法开始
    for( i=0;i<len;i++)  
      {  
    qtr=head->next;           //每一次内循环之后,ptrqtr必然在最后两个节点上
           ptr=head->next->next;    //故在进行内循环之前,要重新复位ptrqtr
    for( j=0;j<len-i-1;j++)  
       {  
      if(  (ptr->score_c> qtr->score_c)&&(ptr->stu_class==qtr->stu_class) )  
    {  
                        strcpy(temp->stu_major,qtr->stu_major);
    strcpy(temp->stu_name,qtr->stu_name);
    temp->stu_ID=qtr->stu_ID;
    temp->stu_class=qtr->stu_class;
    temp->score_math=qtr->score_math;
    temp->score_english=qtr->score_english;
    temp->score_c=qtr->score_c;
    temp->score_ave=qtr->score_ave;
    temp->ME=qtr->ME;
    temp->CE=qtr->CE;
    temp->TM_all=qtr->TM_all;
    temp->ZH_score=qtr->ZH_score;
    
    strcpy(qtr->stu_major,ptr->stu_major);
    strcpy(qtr->stu_name,ptr->stu_name);
    qtr->stu_ID=ptr->stu_ID;
    qtr->stu_class=ptr->stu_class;
    qtr->score_math=ptr->score_math;
    qtr->score_english=ptr->score_english;
    qtr->score_c=ptr->score_c;
    qtr->score_ave=ptr->score_ave;
    qtr->ME=ptr->ME;
    qtr->CE=ptr->CE;
    qtr->TM_all=ptr->TM_all;
    qtr->ZH_score=ptr->ZH_score;
    
    strcpy(ptr->stu_major,temp->stu_major);
    strcpy(ptr->stu_name,temp->stu_name);
    ptr->stu_ID=temp->stu_ID;
    ptr->stu_class=temp->stu_class;
    ptr->score_math=temp->score_math;
    ptr->score_english=temp->score_english;
    ptr->score_c=temp->score_c;
    ptr->score_ave=temp->score_ave;
    ptr->ME=temp->ME;
    ptr->CE=temp->CE;
    ptr->TM_all=temp->TM_all;
    ptr->ZH_score=temp->ZH_score;
                    }  
                    qtr = qtr->next;  
                    ptr = ptr->next;  
                }  
            }  
    ptr=head->next;  
    int m=1;
        while(ptr!= NULL )  
        {   
    if(ptr==NULL)break;
            printf(" %d\t%s\t%d\t%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",
    m,ptr->stu_major,ptr->stu_class,ptr->stu_ID,ptr->stu_name,
    ptr->score_math,ptr->score_english,ptr->score_c,ptr->score_ave,
    (ptr->ME-ptr->ME/100*100),ptr->CE,ptr->TM_all,ptr->ZH_score);
            ptr = ptr->next;  
    m++;
    
        }
    break;
       }
    }
    }
    
    /*该函数是传入一个学生ID进行查找后返回该ID的结构体信息
      该函数可用于教师端学生信息查找,学生端个人信息查看
      该函数return找到的这个学生信息结构体的存储地址指针
    */
    #include"head.h"
    student *FindStudent(int stu_ID,int stu_class){
    struct student *head,*p,*result=NULL;
    
    head=NewLinkList();//调用新建链表函数,读取文件内容
    p=head->next;//使用链表结点后移一个
    while(p!=NULL)
    {
    if((p->stu_class==stu_class))//首先判断班级
    {
    if((p->stu_ID==stu_ID)){//相同班级后查找班级内学号以确定不会串班
    result=p;//找到这个学生后将这个学生的信息存储地址赋值给返回值
    result->next=NULL;//并将返回值的下一结点地址置为NULL
    break;
    }else{
    p=p->next;//如果相同班级内没找到相同ID将链表结点后移一个继续下一次查找
    }
    }else{
    p=p->next;//班级不同结点后移进行下一次循环查找
    }
    }
    return result;//将找到的结点返回
    }
    
    //用户密码修改函数,若是教师函数参数固定传入为-1,学生修改密码的话传入学号为参数
    #include"head.h"
    void student(int stu_ID);
    void teacher(void);
    
    void ModifyPassword(int ID){
    switch(ID){//判断是学生修改密码还是教师修改密码
    case -1:{
    teacher();
    break;
    }
    default:{
    student(ID);
    break;
    }
    }
    }
    
    //学生修改密码
    void student(int stu_ID){
    struct StudentPassword{
    int stu_ID,Password;
    struct StudentPassword *next;
    };
    
    struct StudentPassword *head,*p;
    int ID,Password;
    FILE *fp=openfile("student_UserInformation.txt","a+");
    
    head=(struct StudentPassword *)malloc(sizeof(struct StudentPassword));
    p=head;//有头结点地址链表,使用链表时后移一个结点
    p->next=NULL;
    
    fscanf(fp,"%d%d",&ID,&Password);
    while(!feof(fp)){
    p->next=(struct StudentPassword *)malloc(sizeof(struct StudentPassword));
    p=p->next;
    p->next=NULL;
    
    p->stu_ID=ID;
    p->Password=Password;
    
    fscanf(fp,"%d%d",&ID,&Password);
    }
    printf("请输入新密码:");
    //将链表遍历找到该账号,并修改该账号密码
    while(p!=NULL){
    if(p->stu_ID==stu_ID){
    scanf("%d",&Password);
    if(p->Password==Password){
    printf("新密码不能与原密码相同!\n");
    printf("请重新输入密码:");
    }else{
    int Password2;
    printf("请再次输入密码:");
    scanf("%d",&Password2);//验证密码是否与第一次相同
    if(Password==Password2){
    printf("密码修改成功!");
    p->Password=Password;
    break;
    }else{
    printf("两次密码不一致!\n");
    }
    }
    }
    p=p->next;
    }
    
    fp=openfile("student_UserInformation.txt","w+");//将原文件删除并新建
    
    //将修改后的教师用户保存
    p=head->next;//指针p用过之后记得回原位 
    while(p!=NULL){
    fprintf(fp,"%d\t%d\n",p->stu_ID,p->Password);
    p=p->next;
    }
    fclose(fp);
    
    }
    
    
    //教师修改密码
    void teacher(void){
    
    struct teacher{
    char UserName[20],UserPassword[7];
    struct teacher *next;
    };
    struct teacher *head,*p;
    char UserName[20],Password[7];
    FILE *fp=openfile("teacher_UserInformation.txt","a+");
    
    head=(struct teacher *)malloc(sizeof(struct teacher));
    p=head;
    p->next=NULL;
    
    fscanf(fp,"%s%s",UserName,Password);
    while(!feof(fp)){
    p->next=(struct teacher *)malloc(sizeof(struct teacher));
    p=p->next;
    p->next=NULL;
    
    strcpy(p->UserName,UserName);//读取文件时字符不能直接读取到链表中
    strcpy(p->UserPassword,Password);
    
    fscanf(fp,"%s%s",UserName,Password);
    }
    fclose(fp);
    
    p=head->next;//指针p用过之后记得回原位  
    
    printf("请输入用户名:");
    scanf("%s",UserName);
    printf("请输入原密码:");
    scanf("%s",Password);
    while(p!=NULL){
    if(strcmp(p->UserPassword,Password)==0){
    char Password2[7];
    printf("请输入新密码:");
    scanf("%s",Password);
    if(strcmp(p->UserPassword,Password)==0){
    printf("新密码不能与原密码相同...\n");
    }else{
    printf("请再次输入新密码:");
    scanf("%s",Password2);
    if(strcmp(Password2,Password)==0){
    strcpy(p->UserPassword,Password);
    printf("密码修改已成功!\n");
    break;
    }else{
    printf("两次密码不一样!\n");
    }
    }
    }
    p=p->next;
    }
    
    fp=openfile("teacher_UserInformation.txt","w+");//将原文件删除并新建
    
    //将修改后的教师用户保存
    p=head->next;//指针p用过之后记得回原位 
    while(p!=NULL){
    fprintf(fp,"%s\t%s\n",p->UserName,p->UserPassword);
    p=p->next;
    }
    fclose(fp);
    
    }
    
    //新建链表函数
    /*该函数用于新建一个链表并将存储学生信息的txt文件怎的学生信息读入链表中并return表头,
    使用该函数是记得将使用的表头投结点后移一个结点,因为head是存储该链表的首地址并未存储学生信息*/
    #include"head.h"
    student *NewLinkList(void){
    
    struct student *head,*p,*temp,*ptr;
    
    
    char major[15];//定义临时存储变量
    char name[20];
    
    FILE *fp=openfile("DataInformation.txt","a+");//打开学生信息存储文件
    head=(struct student *)malloc(sizeof(struct student));//头节点空间申请
    temp=(struct student *)malloc(sizeof(struct student));//给临时容器申请一个空间
    temp->next=NULL;//将临时存储器的下一结点赋值为NULL
    p=head;//将链表投结点赋值给P
    p->next=NULL;
    
    fscanf(fp,"%s%d%d%s%d%d%d%d%d%d%d%d",//使用fscanf从文件中读取一行数据
    major,&temp->stu_class,&temp->stu_ID,name,//在while外读取一次是为了使feof()能正常工作
    &temp->score_math,&temp->score_english,&temp->score_c,//因为feof会在文件读取完了下一次读取时才返回1
    &temp->score_ave,&temp->ME,&temp->CE,&temp->TM_all,&temp->ZH_score);
    strcpy(temp->stu_major,major);
    strcpy(temp->stu_name,name);
    
    while(!feof(fp))//feof()判断文件是否读取到末尾了
    {
    p->next=(struct student *)malloc(sizeof(struct student));//为链表结点开辟存储空间
    p=p->next;
    p->next=NULL;
    
    strcpy(p->stu_major,temp->stu_major);//讲读取到的内容转存到链表结点中
    strcpy(p->stu_name,temp->stu_name);
    p->stu_ID=temp->stu_ID;
    p->stu_class=temp->stu_class;
    p->score_math=temp->score_math;
    p->score_english=temp->score_english;
    p->score_c=temp->score_c;
    p->score_ave=temp->score_ave;
    p->ME=temp->ME;
    p->CE=temp->CE;
    p->TM_all=temp->TM_all;
    p->ZH_score=temp->ZH_score;
    
    fscanf(fp,"%s%d%d%s%d%d%d%d%d%d%d%d",//使用fscanf从文件中读取数据
    major,&temp->stu_class,&temp->stu_ID,name,
    &temp->score_math,&temp->score_english,&temp->score_c,
    &temp->score_ave,&temp->ME,&temp->CE,&temp->TM_all,&temp->ZH_score);
    strcpy(temp->stu_major,major);//读取文件时字符不能直接读取到链表中
    strcpy(temp->stu_name,name);
    
    }
    fclose(fp);
    return head;
    }
    
    #include"head.h"
    FILE *openfile(char *fileaddress,char *openmode){
    FILE *fp;
    if((fp=fopen(fileaddress,openmode))==NULL){
    printf("File open error!\n");
    exit(0);
    }
    return(fp);
    }
    
    
    //排序函数:对链表根据学号升序排序
    /*rank函数主要对学生信息根据学号排序,排序成功后返回,学生链表表头*/
    #include"head.h"
    student *Rank(struct student *x)
    {
    struct student *head,*ptr,*qtr,*temp;
    
    temp=(struct student *)malloc(sizeof(student));//定义空的链表节点来当做排序时临时容器,链表下一节点为空节点
    temp->next=NULL;//将下一结点地址置为NULL
    
    int len=0;//链表长度 
    int i,j;//ij循环次数控制参数  
    
    head=x;//将hedd指向参数中传递过来的链表表头地址
    
    ptr=head->next;  
        while(ptr != NULL)             //测链表长度,不包括表头结点  
        {  
            ptr=ptr->next;  
            len++;  
        }  
    //冒泡排序算法开始
    for( i=0;i<len;i++)  
            {  
    qtr=head->next;           //每一次内循环之后,ptrqtr必然在最后两个节点上dd
                ptr=head->next->next;    //故在进行内循环之前,要重新复位ptrqtr
                for( j=0;j<len-i-1;j++)  
                {  
    if(qtr->stu_ID>ptr->stu_ID){//判断学号后,数据交换
    strcpy(temp->stu_major,qtr->stu_major);
    strcpy(temp->stu_name,qtr->stu_name);
    temp->stu_ID=qtr->stu_ID;
    temp->stu_class=qtr->stu_class;
    temp->score_math=qtr->score_math;
    temp->score_english=qtr->score_english;
    temp->score_c=qtr->score_c;
    temp->score_ave=qtr->score_ave;
    temp->ME=qtr->ME;
    temp->CE=qtr->CE;
    temp->TM_all=qtr->TM_all;
    temp->ZH_score=qtr->ZH_score;
    
    strcpy(qtr->stu_major,ptr->stu_major);
    strcpy(qtr->stu_name,ptr->stu_name);
    qtr->stu_ID=ptr->stu_ID;
    qtr->stu_class=ptr->stu_class;
    qtr->score_math=ptr->score_math;
    qtr->score_english=ptr->score_english;
    qtr->score_c=ptr->score_c;
    qtr->score_ave=ptr->score_ave;
    qtr->ME=ptr->ME;
    qtr->CE=ptr->CE;
    qtr->TM_all=ptr->TM_all;
    qtr->ZH_score=ptr->ZH_score;
    
    strcpy(ptr->stu_major,temp->stu_major);
    strcpy(ptr->stu_name,temp->stu_name);
    ptr->stu_ID=temp->stu_ID;
    ptr->stu_class=temp->stu_class;
    ptr->score_math=temp->score_math;
    ptr->score_english=temp->score_english;
    ptr->score_c=temp->score_c;
    ptr->score_ave=temp->score_ave;
    ptr->ME=temp->ME;
    ptr->CE=temp->CE;
    ptr->TM_all=temp->TM_all;
    ptr->ZH_score=temp->ZH_score;
    }
                    qtr = qtr->next;  //内循环每循环一次环结点后移一个
                    ptr = ptr->next;  
                }  
            }  
    return head;
    }
    
    /*学生端主函数,用于对学生端的各项需求处理
    */
    #include"head.h"
    void Student_Main(int stu_ID,int stu_class){
    int choice;
    while(1){
    //system("cls");
    
    printf("\n\n  欢迎使用学生成绩管理系统_学生端\n");
    printf("\t***********************************\n");
    printf("\t | 1.查看个人信息\t\t |\n");
    printf("\t | 2.修改账户密码\t\t |\n");
    printf("\t | 3.同学互评    \t\t |\n");
    printf("\t | 0.退出系统    \t\t |\n");
    printf("\t***********************************\n");
    printf("\t    请输入您的选择...");
    
    scanf("%d",&choice);
    if(choice==0) {
    printf("感谢您的使用,系统已退出!再见!");
    break;
    }
    switch(choice){
    case 1:{
    system("cls");
    struct student *p;
        printf("专业\t班级\t学号\t姓名\t高数\t英语\tc语言\t平均分\t同学互评 导员评分 教师评分 综合得分\n");
    p=FindStudent(stu_ID,stu_class);
    printf("%s\t%d\t%d\t%s\t%d\t%d\t%d\t%d\t %d\t%d\t  %d\t   %d\n",
    p->stu_major,p->stu_class,p->stu_ID,p->stu_name,p->score_math,
    p->score_english,p->score_c,p->score_ave,(p->ME-p->ME/100*100),
    p->CE,p->TM_all,p->ZH_score);
    break;
       }
    case 2:{
    system("cls");
    ModifyPassword((stu_class*100+stu_ID));//修改密码
    break;
       }
    case 3:{
    system("cls");
       ClassMate(stu_ID,stu_class);//同学互评
       break;
       }
    }
    }
    }
    
    /*
    教师端主函数,用于对教师端各项需求进行处理,无参数,无返回值
    */
    #include"head.h"
    void Teacher_Main(void){
    int choice;
    
    while(1){
    //system("cls");
    
    printf("欢迎使用学生成绩管理系统_教师端\n");
    printf("\t***********************************\n");
    printf("\t | 1.新增学生信息\t\t |\n");
    printf("\t | 2.修改学生信息\t\t |\n");
    printf("\t | 3.删除学生信息\t\t |\n");
    printf("\t | 4.查找学生信息\t\t |\n");
    printf("\t | 5.查看学生信息\t\t |\n");
    printf("\t | 6.修改个人密码\t\t |\n");
    printf("\t | 0.退出系统    \t\t |\n");
    printf("\t***********************************\n");
    printf("\t    请输入您的选择...");
    
    
    scanf("%d",&choice);
    if(choice==0) { printf("感谢您的使用,系统已退出!再见!");break;}
    
    switch(choice){
    case 1:{
    system("cls");
    AddNewStudent();
    break;
       }
    case 2:{
    system("cls");
       Change();
       break;
       }
    
    case 3:{
    system("cls");
    DeleteStudent();
    break;
       }
    case 4:{
    system("cls");
    int stu_ID,stu_class;
    struct student *p;
    printf("请输入您要查找的班级和学号:");
    scanf("%d%d",&stu_class,&stu_ID);
    
    p=FindStudent(stu_ID,stu_class);//调用函数查找学生
    if(p==NULL){printf("未找到该学生!\n");break;}//没找到
    
    printf("专业\t班级\t学号\t姓名\t高数\t英语\tc语言\t平均分\t同学互评 导员评分 教师评分 综合得分\n");
    printf("%s\t%d\t%d\t%s\t%d\t%d\t%d\t%d\t %d\t%d\t  %d\t   %d\n",
    p->stu_major,p->stu_class,p->stu_ID,p->stu_name,p->score_math,
    p->score_english,p->score_c,p->score_ave,(p->ME-p->ME/100)*100,p->CE,p->TM_all,p->ZH_score);
    break;
       }
    case 5:{
    system("cls");
    DisplayStudent();
    break;
       }
    case 6:{
    system("cls");
    ModifyPassword(-1);
    break;
       }
    }
    
    }
    }
    展开全文
  • 题目学生信息管理系统学生综合评测系统 学生信息管理系统 学生综合评测系统

    学生信息管理系统

    在这里插入图片描述

    import json
    import os
    import pprint
    
    
    class StudentInfo(object):
        data = {
            '000': {
                '学号': '000',
                '姓名': 'liyu',
                '年龄': '18',
                '性别': 'male',
                '出生年月': '1999-05',
                '地址': '西安',
                '电话': '12345678',
                'E-mail': '12345678@qq.com'
            }
        }
        def __init__(self):
            self.info = {}
            self.newData = {}
    
        @staticmethod
        def mainMenu():
            print('学生信息管理系统'.center(50, '#'))
            print("""
        1.录入信息
        2.查询信息
        3.退出
    请选择:
                """)
            key = input()
            return key
    
        def addInfo(self):
            id = input('请输入学号:')
            if id not in self.data:
                name = input('请输入姓名(拼音):')
                age = input('请输入年龄:')
                sex = input('请输入性别(male,female):')
                dateOfBirth = input('请输入出生年月:')
                address = input('请输入地址:')
                phoneNum = input('请输入电话:')
                Emale = input('请输入电子邮箱:')
    
                self.data[id] = {'学号': id,
                                 '姓名': name,
                                 '年龄': age,
                                 '性别': sex,
                                 '出生年月': dateOfBirth,
                                 '地址': address,
                                 '电话': phoneNum,
                                 'E-mail': Emale
                                 }
                print('学生%s添加成功!' % name)
            else:
                print('学号为%s的学生信息已存在!' % id)
    
        def adminMenu(self):
            key = input("""
    1.按学号排序
    2.按姓名排序
    3.返回上一层
    请选择
            """)
            return key
    
        def idSort(self):
            print('按学号排序结果如下:')
            pprint.pprint(self.data)
    
        def nameSort(self):
            userInfo = self.data.values()
            for j in userInfo:
                self.newData[j['姓名']] = j
            pprint.pprint(self.newData)
    
        def commonUser(self, userName, userId):
            print('您的信息如下:')
            self.info[userName] = self.data[userId]
            pprint.pprint(self.info)
            self.info = {}
    
        def queryMenu(self):
            userName = input("""
    请输入您的姓名:
            """)
            return userName
    
    
    def main():
        while True:
            key = s.mainMenu()
            if key == '1':
                s.addInfo()
            elif key == '2':
                userName = s.queryMenu()
                if userName == 'admin':
                    while True:
                        key = s.adminMenu()
                        if key == '1':
                            s.idSort()
                        elif key == '2':
                            s.nameSort()
                        elif key == '3':
                            break
                        else:
                            print('输入有误!')
                else:
                    for userId, userInfo in s.data.items():
                        if userName == userInfo.get('姓名'):
                            s.commonUser(userName, userId)
                            break
                    else:
                        print('不存在%s的信息' % userName)
            elif key == '3':
    
                break
            else:
                print('输入有误!')
    
    
    if __name__ == '__main__':
        s = StudentInfo()
        if os.path.exists('studentInfo.txt'):
            with open('studentInfo.txt', 'r') as f:
                data = f.read()
                s.data = json.loads(data)
            main()
            dataStr = json.dumps(s.data)
    
            with open('studentInfo.txt', 'w') as f:
                f.write(dataStr)
        else:
            with open('studentInfo.txt', 'w+') as f:
                f.seek(0, 0)
                main()
                dataStr = json.dumps(s.data)
                f.write(dataStr)
    
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    文件内容:
    在这里插入图片描述
    再次运行读取文件信息:
    在这里插入图片描述

    学生综合评测系统

    在这里插入图片描述
    在这里插入图片描述

    # encoding=utf-8
    """
    Date:2019-06-27 09:11
    User:LiYu
    Email:liyu_5498@163.com
    
    """
    import json
    import os
    import pprint
    
    
    class StudentInfo(object):
        data = {
            '000': {
                'id': '000',
                'name': 'liyu',
                'sex': 'male',
                'addr': '西安',
                'phoneNum': 12345678,
                'chineseScore': 100,
                'mathScore': 100,
                'englishScore': 100,
                'averScore': '100.00',
                'examGrade': 1,
                'classmateScore': 100,
                'moralityScore': 100,
                'teacherScore': 100,
                'allScore': '100.00',
                'allGrade': 1,
            }
        }
    
        def __init__(self):
            self.info = {}
            self.newData = {}
    
        @staticmethod
        def mainMenu():
            print('学生综合评测系统'.center(50, '#'))
            print("""
        1.录入(修改)信息
        2.查询信息
        3.删除信息
        4.退出
    请选择:
                """)
            key = input()
            return key
    
        def addInfo(self):
            averScoreDict = {}
            allScoreDict = {}
    
            id = input('请输入学号:')
            name = input('请输入姓名(拼音):')
            sex = input('请输入性别(male,female):')
            address = input('请输入地址:')
            phoneNum = input('请输入电话:')
            chineseScore = int(input('请输入语文成绩:'))
            mathScore = int(input('请输入数学成绩:'))
            englishScore = int(input('请输入英语成绩:'))
            averScore = '%.2f' % ((chineseScore + mathScore + englishScore) / 3)
            classmateScore = int(input('请输入同学互评分:'))
            moralityScore = int(input('请输入品德成绩:'))
            teacherScore = int(input('请输入教师评分:'))
            allScore = '%.2f' % \
                       (float(averScore) * 0.6 +
                        classmateScore * 0.1 +
                        moralityScore * 0.1 +
                        teacherScore * 0.2)
    
            self.data[id] = {'id': id,
                             'name': name,
                             'sex': sex,
                             'addr': address,
                             'phoneNum': phoneNum,
                             'chineseScore': chineseScore,
                             'mathScore': mathScore,
                             'englishScore': englishScore,
                             'averScore': averScore,
                             'examGrade': 0,
                             'classmateScore': classmateScore,
                             'moralityScore': moralityScore,
                             'teacherScore': teacherScore,
                             'allScore': allScore,
                             'allGrade': 0,
                             }
    
            # 求考试平均成绩和总成绩排名
            for i in self.data:
                # {'学号1':考试平均成绩1, '学号2':考试平均成绩2......}
                averScoreDict[self.data.get(i).get('id')] = float(self.data.get(i).get('averScore'))
                # {'学号1':总成绩1, '学号2':总成绩2......}
                allScoreDict[self.data.get(i).get('id')] = float(self.data.get(i).get('allScore'))
            # [('学号1', 考试平均成绩1), ('学号2', 考试平均成绩2)...] 按成绩降序排列
            averScoreSort = sorted(zip(averScoreDict.keys(), averScoreDict.values()), key=lambda x: x[1], reverse=True)
            # [('学号1', 总成绩1), ('学号2', 总成绩2)...] 按成绩降序排列
            allScoreSort = sorted(zip(allScoreDict.keys(), allScoreDict.values()), key=lambda x: x[1], reverse=True)
    
            # 写入考试平均成绩排名
            for i in averScoreSort:
                flag = averScoreSort.index(i) + 1
                self.data[i[0]]['examGrade'] = flag
            # 写入总成绩排名
            for i in allScoreSort:
                flag = allScoreSort.index(i) + 1
                self.data[i[0]]['allGrade'] = flag
            print('学生%s添加(更新)成功!' % name)
            # pprint.pprint(self.data)
    
        def adminMenu(self):
            key = input("""
    欢迎管理员使用,您可以浏览所有学生信息:
        1.按学号排序
        2.按姓名排序
        3.返回上一层
    请选择:
            """)
            return key
    
        def idSort(self):
            print('按学号排序结果如下:')
            pprint.pprint(self.data)
    
        def nameSort(self):
            userInfo = self.data.values()
            for j in userInfo:
                self.newData[j['name']] = j
            print('按姓名排序结果如下:')
            pprint.pprint(self.newData)
    
        def commonUser(self, userName, userId):
            print('您的信息如下:')
            self.info[userName] = self.data[userId]
            pprint.pprint(self.info)
            self.info = {}
    
        def queryMenu(self):
            userName = input("""
    请输入您的姓名:
            """)
            return userName
    
        def delInfo(self):
            delId = input('请输入想要删除的学号:')
            if delId in self.data:
                print('您想要删除的信息如下:')
                pprint.pprint(self.data[delId])
                ensure = input('确定删除吗?(y/n)')
                if ensure == 'y':
                    del self.data[delId]
                    print('学号为%s的学生信息删除成功!' % delId)
                else:
                    print('请重新选择您需要的服务!')
            else:
                print('不存在学号为%s的学生信息!' % delId)
    
    
    def main():
        while True:
            key = s.mainMenu()
            if key == '1':
                s.addInfo()
            elif key == '2':
                userName = s.queryMenu()
                if userName == 'admin':
                    while True:
                        key = s.adminMenu()
                        if key == '1':
                            s.idSort()
                        elif key == '2':
                            s.nameSort()
                        elif key == '3':
                            break
                        else:
                            print('输入有误!')
                else:
                    for userId, userInfo in s.data.items():
                        if userName == userInfo.get('name'):
                            s.commonUser(userName, userId)
                            break
                    else:
                        print('不存在%s的信息' % userName)
            elif key == '3':
                s.delInfo()
            elif key == '4':
                break
            else:
                print('输入有误!')
                
    
    if __name__ == '__main__':
        s = StudentInfo()
        if os.path.exists('studentScoreInfo.txt'):
            with open('studentScoreInfo.txt', 'r') as f:
                data = f.read()
                s.data = json.loads(data)
            main()
            dataStr = json.dumps(s.data)
    
            with open('studentScoreInfo.txt', 'w') as f:
                f.write(dataStr)
        else:
            with open('studentScoreInfo.txt', 'w+') as f:
                f.seek(0, 0)
                main()
                dataStr = json.dumps(s.data)
                f.write(dataStr)
    
    

    添加(更新)信息:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    查询信息(输入姓名查询)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如果输入的是管理员姓名,可浏览所有学生信息(可选择学号排序或姓名排序):
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    删除信息:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    删除之后再次查询,不存在该信息:
    在这里插入图片描述
    在这里插入图片描述
    查看文件(默认的000号被删除了,文件内不存在,并且以学号排序保存):
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    再次运行程序,查看文件内的信息:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 学生管理系统(C语言综合链表实现)

    千次阅读 多人点赞 2019-04-08 14:39:39
    学生管理系统(C语言综合链表实现) 题目:定义单向链表类型StuLink,链表结点包含xh、xm、cj、dj、mc、nxet六个数据项,分别代表学生的学号、姓名、成绩、等级、名次和指向下一个结点的指针,其中:学号、姓名、...

    学生管理系统(C语言综合链表实现)

    题目:定义单向链表类型StuLink,链表结点包含xh、xm、cj、dj、mc、nxet六个数据项,分别代表学生的学号、姓名、成绩、等级、名次和指向下一个结点的指针,其中:学号、姓名、成绩是输入项,等级、名次是计算项。请按如下功能要求设计一个学生成绩管理程序,编程要求:

    ⑴ 设计main函数(10分):建立一个菜单系统,调用Creat_Link函数建立一个StuLink类型的学生链表;调用Insert_Node函数在链表尾插入一个新结点;调用Edit_Node函数修改链表中指定学号的结点;调用Delete_Node函数删除链表中指定学号的结点;调用Query_Node函数查询链表中指定学号的结点并显示查询结果;调用Rank_Link函数计算学生链表中每个学生的名次;调用Analysis_Link函数统计并返回各等级人数;调用Output_Link函数按指定数据项的顺序【学号(升序),或者,成绩(降序)】输出学生成绩表、各等级人数。
    ⑵ 设计Creat_Link函数(10分):建立一个StuLink类型的学生链表,返回链表头指针。每个链表结点代表一个学生信息,要求输入学号、姓名和成绩,其中:学号从1开始按递增1自动生成,成绩必须在[0,100]区间的整数,当输入成绩为-1时,表示输入结束。
    ⑶ 设计Insert_Node函数(10分):在链表尾插入一个新结点。新结点的学号是链表中最大学号加1,姓名和成绩从键盘输入(注意:成绩必须在[0,100]区间的整数),根据成绩计算等级。注意:插入结点会导致链表中各结点名次的变化。
    ⑷ 设计Edit_Node函数(10分):修改链表中指定学号的结点(注意:学号不能修改,成绩必须在[0,100]区间的整数)。注意:当修改成绩时会导致等级和名次的变化。
    ⑸ 设计Delete_Node函数(10分):删除链表中指定学号的结点。注意:删除操作需要重新计算链表中各结点的名次。
    ⑹ 设计Query_Node函数(10分):查询链表中指定学号的结点,并显示查询结果。
    ⑺ 设计Rank_Link函数(10分):计算学生链表中每个学生的名次。名次规则:按成绩降序排名,从第1名开始依次排名,若出现并列名次,则名次需要叠加。例如,若出现5个并列第1名,则没有第2名,下一个名次是第6名,依此类推。
    ⑻ 设计Analysis_Link函数(10分):统计并返回各等级人数。等级标准:
    A:90及以上 B:80及以上 C:70及以上 D:60及以上 E:60以下
    ⑼ 设计Sort_Link函数(10分):按指定数据项的顺序【学号(升序),或者,成绩(降序)】对学生链表进行排序。
    ⑽ 设计Output_Link函数(10分):按指定数据项的顺序【学号(升序),或者,成绩(降序)】输出学生成绩表、各等级人数。学生成绩表每行输出一个学生信息(依次为学号、姓名、成绩、等级和名次,各项间以1个空格隔开),各等级人数分行输出。

    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <string.h>
    struct StuLink
    {
    	int xh;
    	char xm[20];
    	int cj;
    	char dj;
    	int mc;
    	struct StuLink *next;
    };
    
    
    struct StuLink* Creat_Link(struct StuLink* head);		//建立一个StuLink类型的学生链表
    struct StuLink* Insert_Node(struct StuLink * head);		//在链表尾插入一个新结点
    struct StuLink* Edit_Node(struct StuLink* head);		//修改链表中指定学号的结点
    struct StuLink* Delete_Node(struct StuLink* head);		//删除链表中指定学号的结点
    struct StuLink* Rank_Link(struct StuLink* head);		//计算学生链表中每个学生的名次
    void Query_Node(struct StuLink* head);					//查询链表中指定学号的结点
    void Analysis_Link(struct StuLink *head);				//统计并返回各等级人数
    void Sort_Link(struct StuLink* head,int n);				//按指定数据项的顺序(学号升序)(成绩降序)进行排序
    void Output_Link(struct StuLink *head,int n)			//按指定数据项的顺序(学号升序)(成绩降序)输出成绩 
    void display_by_xh(struct StuLink* head);				//将学生节点按学号升序排序 
    void display_by_cj(struct StuLink* head);				//将学生节点按学成绩降序排序
    void swap(struct StuLink* p1, struct StuLink* p2);		//交换两个节点的值 
    
    int main()
    {
    	int n;
    	struct StuLink *head=NULL;
    	while(1)
    	{
    		system("cls");
    		printf("     主菜单—学生成绩管理      \n");
    		printf(" =============================\n");
    		printf("|1-创建链表  	2-链表维护    |\n");
    		printf("|3-计算排序     4-统计分析    |\n");
    		printf("|5-报表输出     0-退出        |\n"); 
    		printf(" =============================\n");
    		printf("     请输入菜单编号(0-5):");
    		scanf("%d",&n);
    		while(!(n==1 || n==2 || n==3 || n==4 || n==5 || n == 0 ) )
    		{
    			printf("输入错误,请重新输入"); 
    			scanf("%d",&n);
    		}
    		if(n==0)
    		{
    			printf("感谢使用成绩管理系统,谢谢!");
    			break;
    		}
    		switch(n)
    		{
    			case 1:
    				head=Creat_Link(head);
    				fflush(stdin);
    				printf("\n按回车键继续\n"); 
    				getchar();
    				break;
    			case 2:
    				while(1)
    				{
    					system("cls");
    					printf("  二级菜单—链表维护管理\n");
    					printf(" ======================\n");
    					printf("|  1-添加一个学生信息  |\n");
    					printf("|  2-修改一个学生信息  |\n");
    					printf("|  3-删除一个学生信息  |\n");
    					printf("|  4-查询一个学生信息  |\n");
    					printf("|  0-退回上级菜单      |\n");
    					printf(" ======================\n");
    					printf("  请输入菜单编号(0-4):");
    					scanf("%d",&n);
    					while(!(n==1 || n==2 || n==3 || n==4 || n==5 || n == 0 ))
    					{
    						printf("输入错误,请重新输入"); 
    						scanf("%d",&n);
    					}
    					if(n==0)break;
    					else 
    						switch(n)
    						{
    							case 1:head=Insert_Node(head);break;
    							case 2:head=Edit_Node(head);break;
    							case 3:head=Delete_Node(head);break;
    							case 4:Query_Node(head);break;
    						}
    					fflush(stdin);
    					printf("请按回车键继续");
    					getchar();
    				}
    				break;
    			case 3:
    				while(1)
    				{
    					system("cls");
    					printf("        二级菜单—计算排序管理\n");
    					printf(" ======================================\n");
    					printf("|  1-计算学生名次    2-按学号升序排序  |\n");
    					printf("|  3-按成绩降序排序  0-返回上级菜单    |\n");
    					printf(" ======================================\n");
    					printf("         输入菜单编号(0-3): "); 
    					scanf("%d",&n);
    					while(!(n==1 || n==2 || n==3 || n == 0 ) )
    					{
    						printf("输入错误,请重新输入"); 
    						scanf("%d",&n);
    					}
    					if(n==0)break;
    					else 
    						switch(n)
    						{
    							case 1:head=Rank_Link(head),display_by_xh(head);break;
    							case 2:Sort_Link(head,2);break;
    							case 3:Sort_Link(head,3);break;
    						}
    					fflush(stdin);
    					printf("请按回车键继续");
    					getchar();
    
    				}
    				break;
    			case 4:
    				Analysis_Link(head);
    				fflush(stdin);
    				printf("请按回车键继续");
    				getchar();
    				break;
    			case 5:
    				while(1)
    				{
    					system("cls");
    					printf("        二级菜单—报表输出管理\n");
    					printf(" ========================================\n");
    					printf("|  1-学号升序  2-成绩降序 0-返回上级菜单 |\n"); 
    					printf(" ========================================\n");
    					printf("           输入菜单编号(0-2): "); 
    					scanf("%d",&n);
    					while(!(n==1 || n==2 || n==3 || n == 0  ) )
    					{
    						printf("输入错误,请重新输入"); 
    						scanf("%d",&n);
    					}
    					if(n==0)break;
    					else 
    						switch(n)
    						{
    							case 1:Output_Link(head,1);break;
    							case 2:Output_Link(head,2);break;
    						}
    					fflush(stdin);
    					printf("请按回车键继续");
    					getchar();
    				}
    
    		}
    
    	}
    	return 0;
    }
    
    
    struct StuLink* Creat_Link(struct StuLink* head)
    {
    	struct StuLink *p1=NULL, *p2=NULL;
    	int score=0,i=1;
    	char name[20];
    	printf("请输入学生姓名和成绩\n");
    	printf("(输入成绩为-1结束输入):\n");
    	while(1)
    	{
    		scanf("%s%d",name,&score);
    		while(!(score>=0 && score<=100) && score != -1)
    		{
    			printf("输入成绩错误,请重新输入:");
    			scanf("%s%d",name,&score);
    		}
    		if(score == -1)break;		
    		if((p1=(struct StuLink *)malloc(sizeof(struct StuLink)))==NULL)
    		{
    			printf("error");
    			exit(0);
    		}
    		p1->next=NULL; 	//当链表只有一个结点时,head的next为NULL 
    		p1->xh=i++;		//创建链表时学号自动生成 
    		strcpy(p1->xm,name);
    		p1->cj=score;
    		if(score>=90) p1->dj='A';
    		else if(score>=80 && score<90) p1->dj='B';
    		else if(score>=70 && score<80) p1->dj='C';
    		else if(score>=60 && score<70) p1->dj='D';
    		else p1->dj='E';
    		if(i==2)head=p1;
    		else p2->next=p1;
    		p2=p1;	
    	}
    
    	head=Rank_Link(head);
    	printf("\n名次计算结果和链表创建结果如下:\n"); 
    	display_by_xh(head); 
    	return head;
    }
    
    struct StuLink* Insert_Node(struct StuLink * head)
    {
    	struct StuLink *p1=head,*p0=NULL,*p2=NULL;
    	char name[20];
    	int score;
    	printf("请输入姓名和成绩:\n");
    	scanf("%s%d",name,&score);
    	while(!(score>=0 && score<=100) )
    	{
    		printf("输入成绩错误,请重新输入"); 
    		scanf("%s%d",name,&score);
    	} 
    	if((p0=(struct StuLink *)malloc(sizeof(struct StuLink)))==NULL)
    	{
    		printf("error");
    		exit(0);
    	}
    	strcpy(p0->xm,name);
    	p0->cj=score; 
    	if(score>=90) p0->dj='A';
    	else if(score>=80 && score<90) p0->dj='B';
    	else if(score>=70 && score<80) p0->dj='C';
    	else if(score>=60 && score<70) p0->dj='D';
    	else p0->dj='E';
    	p0->next=NULL;
    	if(p1==NULL)
    	{
    		p0->xh=1;			//若链表为空,学号为1 
    		head=p0,head->next=NULL;
    	} 
    	else
    	{
    		while(p1!=NULL)	//若不为空 
    		{
    			p2=p1;
    			p1=p1->next;
    		}	
    		p0->xh=p2->xh+1;		//新成学号为最大学号加一
    		p2->next=p0; 
    	}
    	head=Rank_Link(head);
    	printf("\n名次计算结果和链表插入结果如下:\n");
    	display_by_xh(head); 
    	return head;
    
    }
    
    struct StuLink* Rank_Link(struct StuLink* head)
    {
    	int i,count=0;
    	struct StuLink* p1=NULL,*p2=NULL;
    	for(p1=head;p1!=NULL;p1=p1->next)
    	{
    		for(p2=head;p2!=NULL;p2=p2->next)
    		{
    			if(p1->cj < p2->cj)count++;
    		}
    		p1->mc=count+1;
    		count=0;
    	}
    	return head;
    } 
    
    struct StuLink* Edit_Node(struct StuLink* head)
    {
    	struct StuLink *p=head;
    	int num;
    	printf("请输入要修改学生的学号:");
    	scanf("%d",&num);
    	while( p->xh != num && p->next!=NULL)
    	{
    		p=p->next;
    	}
    	if(p->xh==num)
    	{
    		int score;
    		char name[20];
    		printf("学号=%d,姓名=%s,成绩=%d,等级=%c,名次=%d\n",p->xh,p->xm,p->cj,p->dj,p->mc);
    		printf("请输入姓名和成绩:\n");
    		scanf("%s%d",name,&score);
    		while(!(score>=0 && score<=100) )
    		{
    			printf("输入成绩错误,请重新输入"); 
    			scanf("%s%d",name,&score);
    		}
    		strcpy(p->xm,name);
    		p->cj=score; 
    		if(score>=90) p->dj='A';
    		else if(score>=80 && score<90) p->dj='B';
    		else if(score>=70 && score<80) p->dj='C';
    		else if(score>=60 && score<70) p->dj='D';
    		else p->dj='E';
    		head=Rank_Link(head);
    		printf("\n名次计算结果和链表修改结果如下:\n");
    		display_by_xh(head);
    	}
    	else printf("该学号学生不存在\n"); 
    	return head;
    }
    
    struct StuLink* Delete_Node(struct StuLink* head)
    {
    	struct StuLink *p1,*p2;
    	int num;
    	printf("请输入删除的学生学号:");
    	scanf("%d",&num); 
    	p1=head;
    	while( num != p1->xh &&  p1->next!=NULL)
    	{
    		p2=p1;
    		p1=p1->next;
    	}
    	if(p1->xh==num)
    	{
    		if(head==p1)head=p1->next;
    		else p2->next=p1->next;
    		printf("删除成功\n");
    		head=Rank_Link(head);
    		printf("\n名次计算结果和链表删除结果如下:\n");
    		display_by_xh(head); 
    	}
    	else printf("找不到学号为%d的学生\n",num);
    	return head;
    }
    
    void Query_Node(struct StuLink* head)
    {
    	struct StuLink *p1=head;
    	int num;
    	printf("请输入要查询的学生学号:");
    	scanf("%d",&num);
    	while( num != p1->xh &&  p1->next!=NULL)
    	{
    		p1=p1->next;
    	}
    	if(p1->xh == num)
    	{
    		printf("学号=%d, 姓名=%s, 成绩=%d, 等级=%c 名次=%d \n",p1->xh,p1->xm,p1->cj,p1->dj,p1->mc);
    	}
    	else printf("找不到学号为%d的学生\n",num); 
    }
    
    void Analysis_Link(struct StuLink *head)
    {
    	int a[5]={0},i;
    	struct StuLink *p1=head;
    	while(p1 !=  NULL)
    	{
    		if(p1->dj == 'A') a[0]++;
    		else if(p1->dj == 'B') a[1]++;
    		else if(p1->dj == 'C') a[2]++;
    		else if(p1->dj == 'D') a[3]++;
    		else if(p1->dj == 'E') a[4]++;
    		p1=p1->next;
    	}
    	printf("A:90分及以上  B:80分及以上  C:70分及以上  D:60分及以上 E:60分以下\n");
    	printf("A级人数=%d\n",a[0]);
    	printf("B级人数=%d\n",a[1]);
    	printf("C级人数=%d\n",a[2]);
    	printf("D级人数=%d\n",a[3]);
    	printf("E级人数=%d\n",a[4]);
    }
    
    void Output_Link(struct StuLink *head,int n)
    {
    	if(n==1)display_by_xh(head);
    	else display_by_cj(head);
    }
    
    void Sort_Link(struct StuLink* head,int n)
    {
    	if(n==2)display_by_xh(head);
    	else display_by_cj(head);
    }
    
    void display_by_xh(struct StuLink* head)
    {	
    	struct StuLink *p=NULL, *p1=NULL;
    	for(p=head;p!=NULL;p=p->next)
    		for(p1=p->next;p1!=NULL;p1=p1->next)
    			if(p->xh > p1->xh)swap(p,p1); 
    	printf("学号\t\t姓名\t成绩\t等级\t名次\n");
    	for(p=head;p!=NULL;p=p->next)
    		printf("%d\t\t%s\t%d\t%c\t%d\n",p->xh,p->xm,p->cj,p->dj,p->mc);
    }
    
    void display_by_cj(struct StuLink* head)
    {
    	struct StuLink* p=NULL,*p1=NULL;
    	for(p=head;p!=NULL;p=p->next)
    		for(p1=p->next;p1!=NULL;p1=p1->next)
    			if(p->cj < p1->cj)swap(p,p1); 
    	printf("学号\t\t姓名\t成绩\t等级\t名次\n");
    	for(p=head;p!=NULL;p=p->next)
    		printf("%d\t\t%s\t%d\t%c\t%d\n",p->xh,p->xm,p->cj,p->dj,p->mc);
    }
    
    void swap(struct StuLink* p1, struct StuLink* p2)
    {
    	int temp;
    	char c_temp;
    	char t_name[20];
    	c_temp=p1->dj,p1->dj=p2->dj,p2->dj=c_temp;
    	strcpy(t_name,p1->xm);
    	strcpy(p1->xm,p2->xm);
    	strcpy(p2->xm,t_name);
    	temp=p1->xh, p1->xh=p2->xh, p2->xh=temp;
    	temp=p1->cj, p1->cj=p2->cj, p2->cj=temp;
    	temp=p1->mc, p1->mc=p2->mc, p2->mc=temp;
    } 
    
    展开全文
  • C++学生信息管理系统

    千次阅读 多人点赞 2019-11-06 11:20:30
    我大一时,使用C++写了一个简单的学生管理系统,主要是为了完成老师布置的课程设计。现在又快到那个验收课程设计的时候了,现在分享给大家。如果你要的是用C写的代码,这个也是可以参考的,你可以自己进行修改成C的...

    我大一时,使用C++写了一个简单的学生信息管理系统,现在又快到那个验收课程设计的时候了,现在分享给大家。如果你要的是用C写的代码,这个也是可以参考的,你可以自己进行修改成C的代码。

    先上截图简单的介绍下这个程序

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    大致上就这12个功能,你们也可以自己测试测试,像年龄的范围可以设置成18-24岁,性别设置成只可以输入男或女,这些你们都可以在完善下。
    我的IDE是DEV C++,为了测试的一致性,最好和我选用一样的IDE。
    好了,最后附上源代码。

    /*题目 
    新生基本信息统计软件 
    链表类实现并写入文件和实现登录 
    */ 
    #include<iostream>
    #include<fstream>
    #include<cstring> 
    using namespace std;
    struct Student_Node //单链表的结点的定义 
    {
    	    //数据域 
    	    int num; 
    	    int age;
    	    char name[20];
    		char sex[10];
    	    char major[10];
    	    char born[10];
    	    char address[10];
    	    int English;
    	    //指针域 
    	    struct Student_Node *next;
    };
    //定义学生类 
    class Student
    {	    
    public:
              Student()
             {
            	  head=new Student_Node;
             	  head->next=NULL;
    		 }
    		void menu();//主菜单 
    	    void create();//录入学生的信息 
            void add();//增添学生信息 
    	    void pass();//删除学生信息
    		void seek();//查找学生的信息
    		void insert();//插入学生的信息 
    		void rewrite();//修改学生的信息 
    	    void sort();//按照学生的英语成绩进行排序 
    	    void show();//显示全部学生的信息 
    	    void getfile();//将学生的信息写入文件之中
    		void putfile();//将学生的信息显示在终端上 
    	    virtual void count()=0;//统计学生的信息
    	    void major_();
            void sex_();
            void age_();
    private:
            struct Student_Node *head;
    };
    			
    class Freshman:public Student
    {
    public:		
    	    void count()//统计学生的信息 
    	    {
    	    	cout<<"\t\t\t\t1.按专业统计学生的信息"<<endl;
    	        cout<<"\t\t\t\t2.按性别统计学生的信息"<<endl;
    	        cout<<"\t\t\t\t3.按年龄统计学生的信息"<<endl; 
    	        cout<<"\t\t\t\t请输入您的选择......."<<endl<<"\t\t\t\t";
    	  		int i;cin>>i;
    	  		switch(i)
    	  		{
    		  	    case 1: major_(); break;	  	    	
    		  	    case 2: sex_(); break;	
    		  	    case 3: age_(); break; 		  	    	
    	 		}
    		}
    private:
           	struct Student_Node *head;
    };
    void Student::major_()
    {
    	    		struct Student_Node *p1=head->next;
    	            cout<<"\t\t\t\t专业:";
    	            int cnt=0;char c[20];cin>>c;
    				while(p1)
    				{
    					if(strcmp(c,p1->major)==0)
    					{
    		    		 cnt++;
    					}
    					p1=p1->next;
    				}
    				cout<<"\t\t\t\t"<<c<<":"<<cnt<<"人"<<endl;getchar();
    }
    void Student::sex_()
    {
    			struct Student_Node *p1=head->next; 
    			cout<<"\t\t\t\t性别:";
    			int cnt=0;char c[10];cin>>c;
    			while(p1)
    			{
    				if(strcmp(c,p1->sex)==0)
    				{
    				     cnt++;
    				}
    				p1=p1->next;
    			}
    			cout<<"\t\t\t\t"<<c<<":"<<cnt<<"人"<<endl;getchar();		
    }
    void Student::age_()
    {
    			struct Student_Node *p1=head->next; 
    			cout<<"\t\t\t\t年龄:";
    			int cnt=0;int c;cin>>c;
    			while(p1)
    			{
    				if(p1->age==c)
    				{
    				     cnt++;
    				}
    				p1=p1->next;
    			}
    			cout<<"\t\t\t\t"<<c<<"岁"<<":"<<cnt<<"人"<<endl;getchar();
    }		
    //类成员函数的实现 
    void Student::create()//创建一个链表,用来录入学生的信息 
    {
    	cout<<"\t\t\t\t请输入您要创建的学生的数量:"<<endl<<"\t\t\t\t";
    	int i;
    	cin>>i; 
    	struct Student_Node *p1=head;
        struct Student_Node *p2;
       	for(int j=1;j<i+1;j++)
    	{
    		p2=new Student_Node;
    		cout<<"\t\t\t\t请输入第"<<j<<"个学生的学号:"<<endl<<"\t\t\t\t";
    		cin>>p2->num;
    		cout<<"\t\t\t\t请输入第"<<j<<"个学生的年龄:"<<endl<<"\t\t\t\t";
    		cin>>p2->age;
    		cout<<"\t\t\t\t请输入第"<<j<<"个学生的姓名:"<<endl<<"\t\t\t\t";
    		cin>>p2->name;
    		cout<<"\t\t\t\t请输入第"<<j<<"个学生的性别:"<<endl<<"\t\t\t\t";
    		cin>>p2->sex; 
        	cout<<"\t\t\t\t请输入第"<<j<<"个学生的专业:"<<endl<<"\t\t\t\t";
    		cin>>p2->major;
    		cout<<"\t\t\t\t请输入第"<<j<<"个学生的出生日期:"<<endl<<"\t\t\t\t";
    		cin>>p2->born;
    		cout<<"\t\t\t\t请输入第"<<j<<"个学生的家庭住址:"<<endl<<"\t\t\t\t";
    		cin>>p2->address;
    		cout<<"\t\t\t\t请输入第"<<j<<"个学生的英语成绩:"<<endl<<"\t\t\t\t";
    		cin>>p2->English;
    	    p2->next=NULL;
    		p1->next=p2;
    		p1=p2;
    	}
    	getchar();
    }
    void Student::add()//增加学生的信息 
    {
    	struct Student_Node *p1=head->next;
    	struct Student_Node *p2;
    	int a=1,b=1;
    	int c; //学生的学号                
    	while(p1->next!=NULL)
    	{
    		p1=p1->next;
    		a++;
    	}
    	cout<<"\t\t\t\t请输入学生的学号:"<<endl<<"\t\t\t\t";
    	cin>>c;
    	p1=head->next;
    	for(int i=1;i<=a;i++)//判断学生的学号是否重复 
    	{
    		if(p1->num==c)
    		{
    			cout<<"\t\t\t\t出错:学号重复!!!"<<endl;
    			b=0;
    			break; 
    		}
    		p1=p1->next; 
    	} 
    	  if(b!=0)//判断 
    	  {
    	  	 p1=head;
    	  	 while(p1->next!=NULL)
    	  	 {
    	  	 	 p1=p1->next;	   
    	     }
    	        p2=new Student_Node;                 
    	  	    p2->num=c; 	    
        	cout<<"\t\t\t\t请输入学生的年龄:"<<endl<<"\t\t\t\t";cin>>p2->age;	   
    	    cout<<"\t\t\t\t请输入学生的姓名:"<<endl<<"\t\t\t\t";cin>>p2->name;	
         	cout<<"\t\t\t\t请输入学生的性别:"<<endl<<"\t\t\t\t";cin>>p2->sex; 	
            cout<<"\t\t\t\t请输入学生的专业:"<<endl<<"\t\t\t\t";cin>>p2->major;	
    	    cout<<"\t\t\t\t请输入学生的出生日期:"<<endl<<"\t\t\t\t";cin>>p2->born;	
    	    cout<<"\t\t\t\t请输入学生的家庭住址:"<<endl<<"\t\t\t\t";cin>>p2->address;	
    	    cout<<"\t\t\t\t请输入学生的英语成绩:"<<endl<<"\t\t\t\t";cin>>p2->English;	
    		p2->next=NULL;
    		p1->next=p2;
    		p1=p2;    
        }
    	getchar();
    }		
    void Student::pass()//删除学生的信息 
    {
    	struct Student_Node *p1;
    	p1=head;
    	struct Student_Node *p2;
    	int i=1;
    	if(p1->next==NULL)
    	{
    		cout<<"\t\t\t\t删除失败!!!"<<endl;
    		cout<<"\t\t\t\t无可用的数据!!!"<<endl;
    		i=0;
    	}
    	if(i==1)
    	{	 
    	     int j;
    		 cout<<"\t\t\t\t请输入您想要删除的学生的学号:"<<endl<<"\t\t\t\t";
    		 cin>>j;
    		 while(p1->next!=NULL)
    		 {
    		 	if(p1->next->num==j)
    		 	{
    		 		cout<<"\t\t\t\t******删除成功********"<<endl;
    		 		getchar();
    		 		p2=p1->next;
    		 		p1->next=p2->next;
    		 		delete p2;
    		 		return ;
    		 		
    			}
    			p1=p1->next;	
    		 }
    		 cout<<"\t\t\t\t删除错误!!!无法找到此学生的信息!!!"<<endl;	
    	}
    	getchar();
    }
    void Student::seek() //查找学生的信息 
    {
    	int  i=0;
    	struct Student_Node *p1=head->next;
    	int j;
    	cout<<"\t\t\t\t|--------------------------|"<<endl;
    	cout<<"\t\t\t\t|                          |"<<endl;
    	cout<<"\t\t\t\t|【1】请输入学生的学号查询 |"<<endl;
    	cout<<"\t\t\t\t|【2】请输入学生的姓名查询 |"<<endl;
    	cout<<"\t\t\t\t|                          |"<<endl;
    	cout<<"\t\t\t\t|--------------------------|"<<endl;
    	cout<<"\t\t\t\t";
    	cin>>j; 
    	switch(j)
          {
               case 1:
    		   int a;
    		   cout<<"\t\t\t\t请输入学生的学号:"<<endl<<"\t\t\t\t";
    		   cin>>a;
    		   while(p1!=NULL)
    		   {
    		   	  if(p1->num==a)
    		   	  {
    		   	  	  	cout<<"\t\t\t\t该学生的学号:\t\t\t\t";
    				    cout<<p1->num<<endl;
    				    cout<<"\t\t\t\t该学生的年龄:\t\t\t\t";
    				    cout<<p1->age<<endl;
    				    cout<<"\t\t\t\t该学生的姓名:\t\t\t\t";
    					cout<<p1->name<<endl;
    					cout<<"\t\t\t\t该学生的性别:\t\t\t\t";
    					cout<<p1->sex<<endl; 
    				    cout<<"\t\t\t\t该学生的专业:\t\t\t\t";					
    					cout<<p1->major<<endl;
    					cout<<"\t\t\t\t该学生的出生日期:\t\t\t";
    					cout<<p1->born<<endl;
    					cout<<"\t\t\t\t该学生的家庭住址:\t\t\t";					
    					cout<<p1->address<<endl;
    					cout<<"\t\t\t\t该学生的英语成绩:\t\t\t";
    					cout<<p1->English<<endl;	
    					i++;		   	  	  
    			  }
    			        p1=p1->next;
    		   }
    		           if(i==0)
    	                {
    	                	cout<<"\t\t\t\t查询错误!!!"<<endl; 
    	                	cout<<"\t\t\t\t没有此学生的数据!!!"<<endl; 
    				    } 
    			break; 
    		case 2:	
    		char xingming[20];
    		cout<<"\t\t\t\t请输入学生的姓名:"<<endl;
    		cout<<"\t\t\t\t";	
    		cin>>xingming;	
    		while(p1!=NULL)
    		{
    			 if(strcmp(p1->name,xingming)==0)
    			 {
    			 	    
    			 	    cout<<"\t\t\t\t该学生的学号:\t\t\t\t";
    				    cout<<p1->num<<endl;
    				    cout<<"\t\t\t\t该学生的年龄:\t\t\t\t";
    				    cout<<p1->age<<endl;
    				    cout<<"\t\t\t\t该学生的姓名:\t\t\t\t";
    					cout<<p1->name<<endl;
    					cout<<"\t\t\t\t该学生的性别:\t\t\t\t";
    					cout<<p1->sex<<endl; 
    				    cout<<"\t\t\t\t该学生的专业:\t\t\t\t";					
    					cout<<p1->major<<endl;
    					cout<<"\t\t\t\t该学生的出生日期:\t\t\t";
    					cout<<p1->born<<endl;
    					cout<<"\t\t\t\t该学生的家庭住址:\t\t\t";					
    					cout<<p1->address<<endl;
    					cout<<"\t\t\t\t该学生的英语成绩:\t\t\t";
    					cout<<p1->English;						
    		            i++;
    			 }
    			 p1=p1->next;
    		}	
    		 if(i==0)	
    			{
    				
    				cout<<"\t\t\t\t查询错误!!!"<<endl; 
    	            cout<<"\t\t\t\t没有此学生的数据!!!"<<endl;
    			}
    			break;
    			default:
    			cout<<"\t\t\t\t信息错误!!!"<<endl;	
          }
    	getchar();
    }
    void Student::insert() //插入学生的信息 
    {
    	struct Student_Node *p1,*p2;
    	struct Student_Node *p3; 
    	int i;
    	cout<<"\t\t\t\t请输入要在哪个学号之后插入学生信息:"<<endl<<"\t\t\t\t";
    	cin>>i;
    	p1=new Student_Node;
    	cout<<"\t\t\t\t请输入待插入学生的学号:"<<endl<<"\t\t\t\t";
    	cin>>p1->num;
    	cout<<"\t\t\t\t请输入待插入学生的年龄:"<<endl<<"\t\t\t\t";
    	cin>>p1->age;
    	cout<<"\t\t\t\t请输入待插入学生的姓名:"<<endl<<"\t\t\t\t";
    	cin>>p1->name; 
    	cout<<"\t\t\t\t请输入待插入学生的性别:"<<endl<<"\t\t\t\t";
    	cin>>p1->sex;
    	cout<<"\t\t\t\t请输入待插入学生的专业:"<<endl<<"\t\t\t\t";
    	cin>>p1->major;
    	cout<<"\t\t\t\t请输入待插入学生的出生日期:"<<endl<<"\t\t\t\t";
    	cin>>p1->born;
    	cout<<"\t\t\t\t请输入待插入学生的英语成绩:"<<endl<<"\t\t\t\t";
    	cin>>p1->English;
    	cout<<"\t\t\t\t请输入待插入学生的家庭住址:"<<endl<<"\t\t\t\t";
    	cin>>p1->address;
    	p2=head->next;
    	p3=head;
    	while(p2)
    	{
    		p3=p2;
    		if(p3->num==i)
    		{
    			break;
    		}
    		p2=p2->next;	
    	}
        p1->next=p3->next; 
    	p3->next=p1;
    	getchar();
    }
    void Student::rewrite()//修改学生的信息   
    {
    	struct Student_Node *p1=head->next;
    	struct Student_Node *p2=head->next;
    	cout<<"\t\t\t\t请输入需要修改的学生的学号:"<<endl;
    	int i;
    	int j=0;
    	int k=1;
    	cout<<"\t\t\t\t";
    	cin>>i;
    	while(p1)
    	{
    		if(p1->num==i)//对是否有该生的信息进行判断 
    		{
    			j=1;
    		}
    		p1=p1->next; 
    	}
    	 if(j==0)
    	 {
    	 	cout<<"\t\t\t\t错误!!!"<<endl;
    	 	cout<<"\t\t\t\t没有该生的信息!!!"<<endl;
    	 }
    	 if(j==1)
    	 {
    	    p1=head->next; 
    		while(p1)
    		{
    			if(p1->num==i)
    			 {
    			 	cout<<"\t\t\t\t-----------------------------"<<endl;
    			 	cout<<"\t\t\t\t|---【1】修改学生的学号------"<<endl; 
    				cout<<"\t\t\t\t|---【2】修改学生的姓名------"<<endl;
    		 		cout<<"\t\t\t\t|---【3】修改学生的性别------"<<endl;
    		 		cout<<"\t\t\t\t|---【4】修改学生的专业------"<<endl;
    			 	cout<<"\t\t\t\t|---【5】修改学生的出生日期--"<<endl;
    			    cout<<"\t\t\t\t|---【6】修改学生的家庭住址--"<<endl;                      
    			 	cout<<"\t\t\t\t|---【7】修改学生的英语成绩--"<<endl; 
    				cout<<"\t\t\t\t|---【8】修改学生的年龄------"<<endl;                    
                    cout<<"\t\t\t\t|----------------------------"<<endl;     
    				int x;
    				cout<<"\t\t\t\t";
    				cin>>x;
    				switch(x)
    				{
    					case 1:
    					cout<<"\t\t\t\t请输入修改后的学号:"<<endl;
    					int y;
    					cout<<"\t\t\t\t";
    					cin>>y; 
    					while(p2)
    					{
    						if(p2->num==y)
    						{
    							cout<<"\t\t\t\t出错!!!"<<endl;
    							cout<<"\t\t\t\t学号重复!!!"<<endl; 
    							break; 
    							k=0;	
    						}
    						p2=p2->next;
    					}
    					if(k!=0)
    					{
    						p1->num=y;
    					}
    					break;
    					case 2:
    					cout<<"\t\t\t\t请输入姓名:"<<endl<<"\t\t\t\t";
    					cin>>p1->name;
    					break;
    					case 3:
    					cout<<"\t\t\t\t请输入性别:"<<endl<<"\t\t\t\t";
    					cin>>p1->sex;
    					break;
    					case 4:
    					cout<<"\t\t\t\t请输入专业:"<<endl<<"\t\t\t\t";
    					cin>>p1->major;
    					break;
    					case 5:
    					cout<<"\t\t\t\t请输入出生日期:"<<endl<<"\t\t\t\t";
    					cin>>p1->born;
    					break;
    					case 6:
    					cout<<"\t\t\t\t请输入家庭住址:"<<endl<<"\t\t\t\t";	
    					cin>>p1->address;
    					break;
    					case 7:
    					cout<<"\t\t\t\t请输入英语成绩:"<<endl<<"\t\t\t\t";
    					cin>>p1->English;
    					break;
    					case 8:
    					cout<<"\t\t\t\t请输入年龄:"<<endl<<"\t\t\t\t";
    					cin>>p1->age;
    					break;
    				}
    				break;	           			 	
    			 }	 	
    		}	               
    	 }
    	 getchar();
    }
    void Student::sort()// 按照英语成绩排序
    //由高分到低分排列  
    {
    	int i=1;
    	if(head->next==NULL)
    	{
    		i=0;
    	}
    	if(i==0)
    	{
    		cout<<"\t\t\t\t出错!!!"<<endl;
    		cout<<"\t\t\t\t没有找到学生的数据!!!"<<endl; 
    	}
    	if(i==1)
    	{
    		struct Student_Node *p1,*p2;
    	    int num_1;
    	    int age_1;
    	    char name_1[20];
    		char sex_1[10];
    	    char major_1[10];
    	    char born_1[10];
    	    char address_1[10];
    	    int English_1;
    	    int num_2;
    	    int age_2;
    	    char name_2[20];
    		char sex_2[10];
    	    char major_2[10];
    	    char born_2[10];
    	    char address_2[10];
    	    int English_2;
    	    for(p1=head->next;p1!=NULL;p1=p1->next)
    		{
    			for(p2=p1->next;p2!=NULL;p2=p2->next)
    			{
    				if(p1->English<p2->English)
    				{
    					num_1=p1->num;
    					age_1=p1->age;
    					strcpy(name_1,p1->name);
    					strcpy(sex_1,p1->sex);
    					strcpy(major_1,p1->major);
    					strcpy(born_1,p1->born);
    					strcpy(address_1,p1->address);
    					English_1=p1->English;
    					num_2=p2->num;
    					age_2=p2->age;
    					strcpy(name_2,p2->name);
    					strcpy(sex_2,p2->sex);
    					strcpy(major_2,p2->major);
    					strcpy(born_2,p2->born);
    					strcpy(address_2,p2->address);
    					English_2=p2->English;
    					p1->num=num_2;
    					p1->age=age_2;
    					strcpy(p1->name,name_2);
    					strcpy(p1->sex ,sex_2);
    					strcpy(p1->major ,major_2);
    					strcpy(p1->born ,born_2);
    					strcpy(p1->address ,address_2);
    					p1->English=English_2;
    					p2->num=num_1;
    					p2->age=age_1;
    					strcpy(p2->name,name_1);
    					strcpy(p2->sex,sex_1);
    					strcpy(p2->major,major_1);
    					strcpy(p2->born,born_1);
    					strcpy(p2->address,address_1);
    					p2->English=English_1;		
    				}				
    			}
    		}
    		cout<<"\t\t\t\tWonderful*****排序成功*****"<<endl; 		  
    	}getchar(); 
    }
    void Student::show()//显示全部学生信息 
    {
    	struct Student_Node *p1=head->next;int i=1;	
        if(p1==NULL)
    	{
    	    i=0;
    	}	
    	if(i==0)
    	{
    		cout<<"\t\t\t\t出错!!!"<<endl;
    		cout<<"\t\t\t\t没有找到学生的信息!!!"<<endl;
    	}
    	if(i=1)
    	{
    		while(p1)
    		{
    			    cout<<endl;
    		      	cout<<"学生的学号:\t\t\t"<<p1->num<<endl;
    		      	cout<<"学生的年龄:\t\t\t"<<p1->age<<endl;
    			    cout<<"学生的姓名:\t\t\t"<<p1->name<<endl; 	
    				cout<<"学生的性别:\t\t\t"<<p1->sex<<endl;
    			    cout<<"学生的专业:\t\t\t"<<p1->major<<endl;					
    				cout<<"学生的出生日期:\t\t\t"<<p1->born<<endl;
    				cout<<"学生的家庭住址:\t\t\t"<<p1->address<<endl;					
    				cout<<"学生的英语成绩:\t\t\t"<<p1->English;	
    			    p1=p1->next;
    		}
    	}getchar();	
    }
    void Student::getfile()//将学生的信息写入文件之中
    {
    	ofstream outfile(".studentlist.txt");
    	if(!outfile)
    	{
    		 cout<<"打开文件失败!"<<endl;return ;		 
    	}
    	struct Student_Node *p1;
    	p1=head->next;
    	while(p1)
    	{
    	  outfile<<"学号:"<<p1->num<<endl;
    	  outfile<<"年龄:"<<p1->age<<endl;
    	  outfile<<"姓名:"<<p1->name<<endl;
          outfile<<"性别:"<<p1->sex<<endl;
    	  outfile<<"专业:"<<p1->major<<endl;
    	  outfile<<"出生日期:"<<p1->born<<endl;
    	  outfile<<"家庭地址:"<<p1->address<<endl;
    	  outfile<<"英语成绩:"<<p1->English<<endl;
          p1=p1->next;
    	}
    	outfile.close();
    	cout<<"保存成功!"<<endl;
    	getchar();
    }
    void Student::putfile()//将学生的信息显示在终端上 
    {
    	FILE *fp;
    	char str[1024];
    	fp=fopen(".studentlist.txt","r");
    	if(!fp)
    	{
    		return ;
    	}
    	while(fgets(str,1024,fp))
    	{
    		 cout<<str;
    	}
    	fclose(fp);
    	cout<<endl<<endl;
        system("pause");
    }
    void Student::menu()
    {
    	        cout<<"\t\t\t\t------------------------------------"<<endl;
    		   	cout<<"\t\t\t\t|            主菜单                 |"<<endl; 
    	     	cout<<"\t\t\t\t| 【1】创建学生的信息               |"<<endl; 
    		    cout<<"\t\t\t\t| 【2】增添学生信息                 |"<<endl; 
    		    cout<<"\t\t\t\t| 【3】删除学生信息                 |"<<endl; 
    		    cout<<"\t\t\t\t| 【4】查找学生的信息               |"<<endl; 
    		    cout<<"\t\t\t\t| 【5】插入学生的信息               |"<<endl; 
    		    cout<<"\t\t\t\t| 【6】显示学生的信息               |"<<endl;
    		    cout<<"\t\t\t\t| 【7】修改学生的信息               |"<<endl; 		    
    	  	    cout<<"\t\t\t\t| 【8】按照学生的英语成绩进行排序   |"<<endl; 
    	  	    cout<<"\t\t\t\t| 【9】将录入的学生的信息进行保存   |"<<endl; 
    	  	    cout<<"\t\t\t\t| 【10】将所保存的学生的信息进行读取|"<<endl;
    	  	    cout<<"\t\t\t\t| 【11】退出新生基本信息统计软件    |"<<endl; 
    	  	    cout<<"\t\t\t\t| 【12】统计学生的信息              |"<<endl; 
    	    	cout<<"\t\t\t\t------------------------------------|"<<endl; 
    	        cout<<"\t\t\t\t请输入您的选择:"<<endl<<"\t\t\t\t";
    }
    void start_page()
    {
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl;
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl;
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl;
           cout<<"\t\t\t\t|------------------------------------|"<<endl;
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl; 
    	   cout<<"\t\t\t\t|欢迎您使用新生基本信息统计软件!!!|"<<endl;
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl;
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl;
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl;
    	   cout<<"\t\t\t\t|------------------------------------|"<<endl;
    	   cout<<"\t\t\t\t请按Enter进行下一步!!!"<<endl<<"\t\t\t\t";
           getchar();
           system("cls");	
    }
    void selection_function()
    {  
    		Student *p=new Freshman();      
    	    while(1)
    	    {
    	    	p->menu();int i;cin>>i;	    		        
    	    	switch(i)
    	        {
    	        	case 1: p->create();break;
    	        	case 2: p->add();break;
    	        	case 3: p->pass();break;
    	        	case 4: p->seek();break;
    	        	case 5: p->insert();break;
    	        	case 6: p->show();break;
    				case 7: p->rewrite();break;
    				case 8: p->sort();break;
    				case 9: p->getfile();break;
    				case 10: p->putfile();break;
    	        	case 11: cout<<"\t\t\t\t已退出,谢谢您的使用!!!"<<endl;break;
    	        	case 12: p->count();break;
    			}
    			if(i==11)
    			{
    				break;	
    			}
    			cout<<"\t\t\t\t"<<endl<<endl;
    			cout<<"点击Enter键进行下一步";
                getchar();
    			system("cls");	
    		}
    }
    void login()
    {
    	 char username[10],password[10];
    	 cout<<"\t\t\t\t欢迎您进入新生基本信息统计软件的注册界面!"<<endl<<endl;
    	 cout<<"\t\t\t\t【0】我已经注册过了!"<<endl<<endl;
    	 cout<<"\t\t\t\t【1】未注册,现在注册!"<<endl<<endl; 
    	 cout<<"\t\t\t\t请按Entet键继续......";
    	 getchar(); int i; 
    	 cout<<"\t\t\t\t"<<"请输入......"; cin>>i;	
    	 if(i)
    	 {
    	 	   cout<<"\t\t\t\t"<<"欢迎新用户注册!"<<endl<<endl;
    	 	   cout<<"\t\t\t\t"<<"请输入您的用户名:";
    	 	   cin>>username;
    	 	   cout<<"\t\t\t\t"<<"请输入您的密码:";
    	 	   cin>>password;
    	 	   system("pause");
    		   system("cls");
    		   ofstream regist(".login.txt");
    		   regist<<username;
    		   regist<<password;
    		   regist.close();
    		   cout<<"注册成功!"<<endl;
    		   getchar();
    		   system("cls");
    	 }
    	 cout<<"\t\t\t\t"<<"请输入您的用户名:"; 
    	 cin>>username;
    	 cout<<"\t\t\t\t"<<"请输入您的密码:";
    	 cin>>password;
         FILE *fp;
    	 char str[20];
         fp=fopen(".login.txt","r");
    	 if(!fp)
    	 {
    		return ;
    	 }
    	 while(fgets(str,20,fp))
    	 {
    	      
    	 }
    	 fclose(fp);
    	 if(strcmp(strcat(username,password),str)==0)
    	 {
    	 	    selection_function();      
    	 }
    	 else
    	 {
    	      cout<<"\t\t\t\t账号或密码错误,请输入正确的账号和密码!!!"<<endl;
    	      cout<<"\t\t\t\t为了保证您输入的信息的完整性,请您正常退出!!!"<<endl;   
    	 }
         getchar();
    }
    int main()
    {
    	   system("color 1f");
    	   start_page();
    	   login();
    	   return 0;  	
    }
    
    展开全文
  • 基于javaweb实现学生成绩管理系统,实现了学生信息管理,课程管理,教师信息管理,学生成绩汇总,学生登录注册,教师和管理员的登录,个人信息修改等。 系统功能大致描述:基于javaweb实现学生成绩管理系统,实现了学生信息...
  • 学生信息综合管理系统太过俗气,所以记录下来以免认为我是在网上down的代码。 时间:2015、04、24 问题1:连接数据库的包出问题导致数据库无法连接上,最开始用的是mysql-connector-java-5.1.24.jar,换成mysql-jdbc...
  • C#学生管理系统

    万次阅读 多人点赞 2018-07-10 20:09:50
    环境:SqlServer+VS2015 在公众号已经写了一遍教程,不懂得小伙伴可以在公众号中一步一步的看哦!!!...JAVA学生信息管理系统 :https://blog.csdn.net/robot_sh/article/details/103707016 ...
  • 学生成绩管理系统数据库设计--MySQL

    万次阅读 多人点赞 2020-06-18 13:02:04
    MySQL/SQL Server 数据库设计(学生成绩管理系统) 设计大纲 1. 项目背景及需求分析 1.1 项目背景 1.2 需求分析 1.2.1 信息需求 1.2.2 功能需求 1.2.3 安全性与完整性需求 2. 概念结构设计 2.1 抽象出系统实体 2.2 ...
  • 综合应用:学生管理系统(文件版)

    千次阅读 2018-07-05 22:02:24
    import time import os # 定一个列表,用来存储所有的学生信息(每个学生是一个字典) info_list = [] ... 学生管理系统 V1.0") print(" 1:添加学生") print(" 2:删除学生...
  • JavaWeb学生管理系统

    千次阅读 多人点赞 2019-07-09 15:50:32
    学生成绩管理功能 添加学生功能:姓名、学号、性别、出生年月日。(学号自动生成且唯一) 添加学生成绩功能:每个人都有数学、Java、英语、体育四门课,可分课程输入成绩。 根据学生学号查...
  • python综合练习:学生管理系统

    千次阅读 2021-01-07 11:46:32
    利用python完成完成一个学生信息的增删改查程序,主要涉及知识点:程序控制结构(做多级菜单)、文件读写操作(学生信息要保存到磁盘上的文件里)。 2、思维导图 二、 学生实体(Entity) 2、关系模式 学生(学号...
  • 基于C#的学生选课管理系统

    千次阅读 2021-01-09 22:14:19
    基于C#的学生选课管理系统 摘 要 随着科学技术的不断提高,计算机科学日渐成熟,它已经进入人类社会的各个领域并发挥着越来越重要的作用。使用计算机对选课信息进行管理,具有传统选课方式无法比拟的优点。例如...
  • c语言综合实验 学生成绩管理系统

    千次阅读 2017-06-23 20:58:54
     printf("*************欢迎进入学生成绩管理系统***********************\n输入你的选择\n");    scanf("%d",&choice);  switch(choice)  {  case 1:{  system("cls");  input(stu);  ...
  • 学生成绩管理系统 C++

    千次阅读 多人点赞 2019-01-06 17:08:35
    /******************************************.../*程序名:学生成绩管理系统 作者:SDUQER */ /*主要功能:添加删除修改排序; */ /*编制时间:2018年12月13日 */ /*************************...
  • 大一上C语言课程综合实验——学生成绩管理系统

    千次阅读 多人点赞 2021-03-25 19:11:30
    相信很多同仁在大学学习编程的时候都会被老师要求动手敲出一个学生成绩管理系统或图书馆管理系统之类的程序吧。 不得不说,这个程序简直就是大多数初学者的恶梦,毕竟它的内容涉及到了整一个学期学到的所有知识。 ...
  • 学生成绩管理系统

    万次阅读 多人点赞 2019-10-12 20:35:46
    计算每个学生各门功课总分和平均分,按学号或总分排序输出每个学生的基本信息及总分、平均分和名次。 计算全班各门功课的平均分,显示每门课程中低于平均分的每一个学生的学号,姓名,性别,科目,成绩。 显示每门...
  • C语言模拟学生学籍管理系统

    千次阅读 多人点赞 2016-09-22 14:55:57
    学生学籍管理系统的C语言模拟实现是对链表、指针、结构体、文件操作等知识点的综合运用,需要实现的功能主要包含:输入学生信息、显示学生信息、查询学生信息、新增学生信息、删除学生信息、修改学生信息、对学生...
  • C#Mysql学生信息管理系统

    千次阅读 多人点赞 2019-07-11 09:21:36
    C#学生信息管理系统连接到Mysql数据库登錄界面重要的數據庫連接知識關於Mysql的安裝:环境变量的配置Mysql 启程!Funsql类总结 登錄界面 代码:` using System; using System.Collections.Generic; using System....
  • Java实训项目:GUI学生信息管理系统(2017)

    万次阅读 多人点赞 2018-02-19 08:39:32
    实训目的:让学生综合运用J2SE有关知识开发【学生信息管理系统】。主要涉及程序控制结构、面向对象编程、图形用户界面、Java数据库应用、MySQL数据库这几个方面的内容。通过本项目的开发,让学生了解系统开发的一般...
  • java web 学生成绩管理系统

    千次阅读 2020-06-09 11:29:41
    学生管理【修改、删除、查询】 课程管理【添加新课程、修改、删除、查询】 分配课程【查询已分配的课程信息】 老师 课程管理【查询、查询课程对应的学生】 ...
  • 首先我们要先想好一个学生应有的信息:姓名、年龄、性别、学号、出生日期等一些基本信息。然后创建一个学生结构,其次我们还要创建出生日期的结构:年月日。这些结构是属于数据域的,然后要创建一个节点
  • 学生信息管理系统(C++实现)

    万次阅读 多人点赞 2018-10-13 10:42:17
    上个月程序设计作业做了一个学生信息管理系统,效果如下图   附上源代码。 //由于不熟悉文件读写,有些地方的代码有点奇怪。但是功能是可以实现的。 //虽然是用C++,但主要还是用了面向过程 /* ·File name...
  • # python实现学生信息管理系统

    千次阅读 2019-07-08 13:42:29
    python实现学生信息管理系统 my_dict={} #先定义一个空字典用来存放数据 #操作页面 def show_menu(): print("---------------------------") print(" 学生管理系统 V1.0") print(" 1:添加学生") ...
  • 学生管理系统

    千次阅读 2016-06-15 21:53:30
    按照要求设计一个学生基本信息管理系统,实现对学生信息的综合管理学生信息包括:学号、姓名、年龄、性别、家庭住址、联系电话、寝室号等信息。 现要求编写程序来完成如下功能: (1)学生信息的输入 包含功能:对...
  • Python——学生成绩管理系统

    万次阅读 2017-07-24 21:31:59
    讲起学生成绩管理系统,从大一C语言的课程设计开始,到大二的C++课程设计都是这个题,最近在学树莓派,好像树莓派常用Python编程,于是学了一波Python,看了一点基本的语法想写点东西练下手。 开发环境:Ubuntu+...
  • Python简单实现学生成绩管理系统

    万次阅读 多人点赞 2017-12-27 17:38:08
    输入并存储学生的信息:通过输入学生的学号、姓名、和分数,然后就可以把数据保存在建立的student文件里面。 打印学生的所有信息:通过一个打印函数就可以把所有的信息打印在屏幕上。 修改学生信息:这个功能首先...
  • C语言 学生信息管理系统【图文背景丰富+代码】

    万次阅读 多人点赞 2020-07-25 11:10:24
    设计一个能够保证信息的准确性和时效性,随时通过计算机对系统进行管理,使得学生信息处于最新状态,保证统计数据和分析准确的具有增删改查学生成绩信息的系统,并为高校学生信息管理提供一种更加高效实用的管理手段...
  • 学生宿舍管理系统

    千次阅读 2020-10-12 00:12:25
    学生住宿管理:信息查询,新增学生信息,修改学生住宿信息,删除学生信息,分配学生宿舍 三.项目流程 1.进行序列化,反序列化操作,用到了Jackson技术 2.进行数据库操作:user(用户表),student(学生表)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,115
精华内容 15,246
关键字:

学生综合管理系统