数据结构课程设计【学生信息管理系统(烟大版)】

来源:互联网 发布:excel圆环图数据 编辑:程序博客网 时间:2024/05/05 14:47
/*   * Copyright (c) 2016, 烟台大学计算机与控制工程学院   * All rights reserved.   * 文件名称:student.project* 作者:李潇  * 完成日期:2016年12月28日   * 版本号:DEVC++  *  * 问题描述:学生信息管理系统,实现信息的输入,显示,插入,查找,删除,排序,修改,览,充值与存入文件
* 输入描述:  */

代码:

//student.h#ifndef STUDENT_H_INCLUDED#define STUDENT_H_INCLUDED#include <stdio.h>typedef struct Student{   char name[10];     //姓名   char num[10];           //学号 (都是四位 便于排序)   char sex;//性别 (w代表女m代表男)   int age;//年龄   char phone[10];//电话号码   int score;//总成绩   int wangfei;//网费   int banlance;//校园卡余额}stu;typedef struct LNode{stu data;struct LNode *next;}LinkList;typedef struct manage//管理员{char zhanghao[10];//账号char password[10];//密码}mag;void InitList( LinkList *&L);//初始化链表void ListInsert(LinkList *&L,LinkList *P);//插入新的节点//void ListDelete(LinkList *&L,LinkList *P);//删除节点void menu();//功能菜单void addstu(LinkList *&L);//增加新的学生void deletestu(LinkList *L);//删除学生void changestu(LinkList *L);//改变学生信息void findstu(LinkList *L);//按学号查找学生并输出该生信息void rechange(LinkList *L);//输入学号进行充值功能void paixu(LinkList *L);//按成绩排序排序 void display(LinkList *&L);//浏览全部学生信息 void saveStuDentFile(LinkList * &L);//保存学生信息到文件void readStuDentput (LinkList *&L);//运行前把文件内容读取到电脑内存void welocome();//首界面void wel1();//管理员登陆界面void carry();//执行阶段//bool check(LinkList *&L,int n);//根据学号判断此生存在不存在#endif // STUDENT_H_INCLUDED


// student.cpp#include <iostream>#include <windows.h>using namespace std;#include <malloc.h>#include <string.h>#include <stdio.h> #include <stdlib.h>#include "student.h"LinkList *L=NULL;/******************************************///这些变量用于输入学生相关的信息 char nam[10];//名字char nu[10];//学号char s;//性别int ag;//年龄char ph[10];//号码int sc;//成绩int wf;//网费int bal;//余额/********************************************************* * 功能描述: 首界面 * 输入描述: 无 * 输出描述: 无 * 返回值  : 无 * 其它说明: 屏幕会显示a3的颜色并输出登陆界面 ************************************************************/  void welocome()//登陆界面{    system("color a3");    printf("-------------------------------------------------------------------------------------------------------------\n");    printf("\n");    printf("       ****************  欢迎来到烟台大学学生信息管理平台 ****************       \n");    printf("\n");    printf("          **********             制作人:李潇              **********         \n");    printf("\n");    printf("            ******                班级:计-156-1               ******           \n");    printf("\n");    printf("            ******                                            ******           \n");    printf("********************************************************************************\n");    printf("-------------------------------------------------------------------------------------------------------------\n");    printf("\n");}/********************************************************* * 功能描述: 管理员登陆界面 * 输入描述: 无 * 输出描述: 无 * 返回值  : 无 * 其它说明: 屏幕会显示d3的颜色并输出管理员登陆界面 相应的内容 ************************************************************/ void wel1()//管理员登陆界面{    system("color d4");    printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");    printf("\n");    printf("         ◇◇◇◇◇◇◇请您输入管理员登陆信息 ◇◇◇◇◇◇◇          \n");    printf("\n");    printf("    ▅▅▅▅▅▅▅      1. 账号: _________    ▃▃▃▃▃▃▃▃▃▃   \n");    printf("\n");    printf("     ▅▅▅▅▅▅▅     2. 密码:  _________    ▃▃▃▃▃▃▃▃▃▃    \n");    printf("\n");    printf("     ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●     \n");    printf("\n");    printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");    printf("\n");}/********************************************************* * 功能描述: 功能菜单 * 输入描述: 无 * 输出描述: 无 * 返回值  : 无 * 其它说明: 屏幕会显示c4的颜色并输出功能菜单栏 ************************************************************/ void menu()//功能菜单{system("color c4");    printf("|______________________________________________________________|\n");    printf("|                                                              |\n");    printf("|                学生信息管理系统                              |\n");    printf("|                                                              |\n");    printf("|               0、 退出系统                                   |\n");    printf("|                                                              |\n");    printf("|               1、 增加学生信息                               |\n");    printf("|                                                              |\n");    printf("|               2、 删除某个学生信息                           |\n");    printf("|                                                              |\n");    printf("|               3、 修改学生信息                               |\n");    printf("|                                                              |\n");    printf("|               4、 查找某个学生的信息                         |\n");    printf("|                                                              |\n");    printf("|               5、 充值                                       |\n");    printf("|                                                              |\n");    printf("|               6、 对学生成绩进行排序                         |\n");    printf("|                                                              |\n");    printf("|               7、浏览全部学生信息                            |\n");    printf("|                                                              |\n");    printf("|          ⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙                      |\n");    printf("|______________________________________________________________|\n");    return ;}/********************************************************* * 功能描述: 执行阶段 * 输入描述: 无 * 输出描述: 无 * 返回值  : 无 * 其它说明: 屏幕会显示c4的颜色并输出功能菜单栏 ************************************************************/ void carry()//执行阶段{    LinkList *L;    InitList(L);    readStuDentput (L);//运行前把文件内容读取到电脑内存    int choose;    while(1)    {        printf("请输入您要选择的功能键:\n");        menu();//功能菜单        scanf("%d",&choose);        switch(choose)        {        case 0://退出系统            printf("谢谢使用!欢迎下次光临");            break;        case 1://增加学生信息            addstu(L);//增加新的学生            break;        case 2://删除所有学生信息            deletestu(L);//删除学生            break;        case 3://改变个学生的信息            changestu(L);//改变学生信息            break;        case 4://查找某个学生的信息            findstu(L);//按学号查找学生并输出该生信息            break;        case 5:// 充值            rechange(L);//输入学号进行充值功能            break;        case 6:// 对学生成绩进行排序            paixu(L);            break;        case 7://输出所有学生的信息    display(L);    break;        default:            printf("请输入正确的选择\n");            break;        }    }}/********************************************************* * 功能描述: 初始化链表 * 输入描述: 无 * 输出描述: 无 * 返回值  : 无 * 其它说明: 头结点本无信息,在这里给头结点附相应的值是为了读取文件那不读入头结点的内容 ************************************************************/ void InitList( LinkList *&L)//初始化链表{    L=(LinkList *)malloc(sizeof(LinkList));   strcpy(L->data.num,"xx");//把后者的内容拷贝到前者中strcpy(L->data.name,"xx");//把后者的内容拷贝到前者中L->data.sex=0;L->data.age=0;strcpy(L->data.phone,"xx");//把后者的内容拷贝到前者中L->data.score=0;L->data.wangfei=0;L->data.banlance=0;    L->next=NULL;}/********************************************************* * 功能描述: 插入新的节点 * 输入描述: 无 * 输出描述: 无 * 返回值  : 无 * 其它说明: 尾插法 ************************************************************/ void ListInsert(LinkList *&L,LinkList *p)//插入新的节点{    LinkList *q=NULL;    q=L;    if(q->next==NULL)    {        q->next=p;        p->next=NULL;    }    else    {        p->next=q->next;        q->next=p;    }}/********************************************************* * 功能描述: 增加新的学生 * 输入描述: 新增的学生相关信息 * 输出描述: 此生存在会输出"该生已存在" * 返回值  : 无 * 其它说明: ************************************************************/ void addstu(LinkList *&L)//增加新的学生{system("color f2");    printf("请输入学生的信息:\n");    printf("学号:");    scanf("%s",nu);    printf("%s\n",nu) ;    //判断    LinkList *q=L->next;    while(q!=NULL )    {          if(strcmp(q->data.num,nu)==0)        {        printf("该生已存在\n");        break; }                   q=q->next;    }    if(q==NULL)    {        LinkList *p;        InitList(p);        strcpy(p->data.num,nu);//把后者的内容拷贝到前者中        printf("姓名:") ;        scanf("%s",nam) ;       // printf("%s\n",nam);        strcpy(p->data.name,nam);//把后者的内容拷贝到前者中        printf("性别:(w为男 m为女)");        scanf(" %c",&s);         //printf("%c\n",s);        p->data.sex=s;        printf("年龄:");        scanf("%d",&ag);       // printf("%d\n",ag);        p->data.age=ag;        printf("总成绩:");        scanf("%d",&sc);       // printf("%d\n",sc);        p->data.score=sc;        printf("网费:");        scanf("%d",&wf);       // printf("%d\n",wf);        p->data.wangfei=wf;        printf("余额:");        scanf("%d",&bal);       // printf("%d\n",bal);        p->data.banlance=bal;        printf("电话号码:");        scanf("%s",ph);        //printf("%s\n",ph);        strcpy(p->data.phone,ph);//把后者的内容拷贝到前者中        ListInsert(L,p);        saveStuDentFile(L);//保存学生信息到文件    }}/********************************************************* * 功能描述: 删除学生 * 输入描述: 要删除学生的学号 * 输出描述: 此生不存在时会输出“此生不存在” 链表本身为空时会输出"还没有学生信息请增加学生信息" * 返回值  : 无 * 其它说明: ************************************************************/ void deletestu(LinkList *L)//删除某个学生{system("color f4");    printf("请输入您要删除的学生的学号:");    scanf("%s",nu);    LinkList *p,*pre;    if(L->next==NULL){printf("还没有学生信息,请增加学生信息\n");return;}pre=L;p=pre->next;int judge=0;while(p){         if(strcmp(p->data.num,nu)==0) {     judge=1;                 pre->next =p->next;                 free(p); p=NULL; printf("删除学生成功\n"); saveStuDentFile(L);//保存学生信息到文件 break; }         pre=p; p=p->next; }if(judge==0)       printf("该生不存在\n");}/********************************************************* * 功能描述: 修改学生信息 * 输入描述: 要修改学生的学号 * 输出描述: 此生不存在时会输出“此生不存在” 存在会输出相应的修改信息的语句 * 返回值  : 无 * 其它说明: ************************************************************/ void changestu(LinkList *L)//改变学生信息{int judge=1;system("color e4");    printf("请输入您要修改学生的学号:\n");    scanf("%s",nu);    LinkList *q=L->next;      while(q!=NULL )    {        if(strcmp(q->data.num,nu)==0)        {    judge=0;            printf("请输入您要修改的信息选项:1.姓名 2. 电话号码 3. 总成绩  4.年龄   \n");            int n;            scanf("%d",&n);            switch(n)            {            case 1:                printf("请输入您要修改的名字:");                scanf("%s",nam);                printf("修改的名字为:%s\n",nam);                strcpy(q->data.name,nam);//把后者的内容拷贝到前者中                printf("修改名字成功!\n");                saveStuDentFile(L);//保存学生信息到文件                break;            case 2:                printf("请输入您要修改的电话号码:");                scanf("%s",ph);                printf("修改的电话号码为:%s\n",ph);                strcpy(q->data.phone,ph);//把后者的内容拷贝到前者中                printf("修改电话号码成功!\n");                saveStuDentFile(L);//保存学生信息到文件                break;            case 3:                printf("请输入您要修改的总成绩");                scanf("%d",&sc);                printf("修改的总成绩为:%d\n",sc);                q->data.score=sc;                printf("修改总成绩成功!\n");                saveStuDentFile(L);//保存学生信息到文件                break;            case 4:                printf("请输入您要修改的年龄:");                scanf("%d",&ag);                printf("修改的年龄为:%d\n",ag);                q->data.age=ag;                printf("修改年龄成功!\n");                saveStuDentFile(L);//保存学生信息到文件                break;            default :                printf("请输入正确的选项\n");                break;            }        }        q=q->next;    }   if(judge==1)   {    printf("该生不存在\n");   }}/********************************************************* * 功能描述: 查找学生信息 * 输入描述: 要查找学生的学号 * 输出描述: 此生不存在时会输出“此生不存在” 存在会输出该生的相应修改信息 * 返回值  : 无 * 其它说明: ************************************************************/ void findstu(LinkList *L)//按学号查找学生并输出该生信息{system("color b1");    printf("请输入您要查找的学生的学号:");    scanf("%s",nu);    LinkList *q=L->next;    while(q!=NULL )    {        if(strcmp(q->data.num,nu)==0)        {            printf("姓名:%s\n",q->data.name);            printf("学号:%s\n",q->data.num);            printf("性别:%c\n",q->data.sex);            printf("年龄:%d\n",q->data.age);            printf("电话号码:%s\n",q->data.phone);            printf("总成绩:%d\n",q->data.score);            printf("网费:%d\n",q->data.wangfei);            printf("余额:%d\n",q->data.banlance);            break;        }      q=q->next;    }    if(q==NULL)        printf("该生不存在\n");}/********************************************************* * 功能描述: 充值功能 * 输入描述: 要充值学生的学号 * 输出描述: 此生不存在时会输出“此生不存在” 存在会输出相应的充值信息的语句 * 返回值  : 无 * 其它说明: ************************************************************/ void rechange(LinkList *L)//输入学号进行充值功能{system("color d6");    int choose;    printf("请输入您要充值的学生的学号:\n");    scanf("%s",&nu);    int money;    LinkList *q=L->next;    while(q!=NULL )    {        if(strcmp(q->data.num,nu)==0)        {            printf("请输入您要充值的选项 : 1. 网费充值  2.校园卡充值\n");            scanf("%d",&choose);            if(choose==1)            {                printf("请输入您要充值的金额:\n");                scanf("%d",&money);                printf("您要充值的金额为%d元\n",money);                q->data.wangfei=q->data.wangfei+money;                printf("网费充值成功!\n");                printf("%s 同学的网费余额为 %d元",q->data.name,q->data.wangfei);                //saveStuDentFile(L);//保存学生信息到文件            }            else if(choose==2)            {                printf("请输入您要充值的金额:\n");                scanf("%d",&money);                printf("您要充值的金额为%d元\n",money);                q->data.banlance=q->data.banlance+money;                printf("校园卡充值成功!\n");                printf("%s 同学的余额为 %d元",q->data.name,q->data.banlance);                //saveStuDentFile(L);//保存学生信息到文件            }            else                printf("请输入正确的选项\n");            break;        }        q=q->next;    }    if(q==NULL)        printf("该生不存在\n");}/********************************************************* * 功能描述: 排序 * 输入描述: * 输出描述: 不存在学生时会输出"还没有学生信息,请增加学生信息" 不然就输出按成绩排序后的所有学生信息 * 返回值  : 无 * 其它说明: ************************************************************/ void paixu(LinkList *L)//按成绩排序排序 并输出排序后的结果 {system("color f9");LinkList *q,*p,*r=L->next;if(r==NULL){printf("还没有学生信息,请增加学生信息\n");return;}while(r) //两层循环完成排序 {         p=r;         q=r->next;         LinkList *tmp;//用于排序时暂存节点          InitList(tmp);         while(q)         {             if(q->data.score > p->data.score)             {             /*先复制q结点信息到tmp*/                strcpy(tmp->data.num,q->data.num);                strcpy(tmp->data.name,q->data.name);                strcpy(tmp->data.phone,q->data.phone);                tmp->data.sex=q->data.sex;                tmp->data.age=q->data.age;                tmp->data.score=q->data.score;                tmp->data.wangfei=q->data.wangfei;                tmp->data.banlance=q->data.banlance;                /*再复制p结点信息到q*/                strcpy(q->data.num,p->data.num);                strcpy(q->data.name,p->data.name);                strcpy(q->data.phone,p->data.phone);                q->data.sex=p->data.sex;                             q->data.age=p->data.age;                q->data.score=p->data.score;                q->data.wangfei=p->data.wangfei;                q->data.banlance=p->data.banlance;                /*最后复制exchange结点信息到p*/                strcpy(p->data.num,tmp->data.num);                strcpy(p->data.name,tmp->data.name);                strcpy(p->data.phone,tmp->data.phone);                p->data.sex=tmp->data.sex;                             p->data.age=tmp->data.age;                p->data.score=tmp->data.score;                p->data.wangfei=tmp->data.wangfei;                p->data.banlance=tmp->data.banlance;             }             q=q->next;         }         r=r->next;    }    saveStuDentFile(L);//保存学生信息到文件printf("排序后的学生信息是:\n");display(L); }/********************************************************* * 功能描述: 浏览全部学生信息 * 输入描述: * 输出描述:  不存在学生时会输出"还没有学生信息,请增加学生信息" 不然就输出所有学生信息 * 返回值  : 无 * 其它说明: ************************************************************/ void display(LinkList *&L)//浏览全部学生信息 {LinkList *q=L->next;if(q==NULL){printf("还没有学生信息,请增加学生信息\n");return;}while(q){system("color c0");printf(" 学号:%s 名字:%s 年龄:%d 性别:%c 电话号码:%s  总成绩:%d  网费: %d  校园卡余额:%d \n",q->data.num,q->data.name,q->data.age,q->data.sex,q->data.phone,q->data.score,q->data.wangfei,q->data.banlance);q=q->next;}}/********************************************************* * 功能描述: 保存学生信息到文件 * 输入描述: 无 * 输出描述:  无 * 返回值  : 无 * 其它说明:把学生信息保存到此文件夹中 ************************************************************/ void saveStuDentFile(LinkList * &L)//保存学生信息到文件{FILE *fp;    //WORK*p;//p = worker;LinkList *p=L->next;if((fp=fopen("student.txt","w"))==NULL)// 以可写的方式打开当前目录下的.txt{printf("Can not open the file,press any key exit!");exit(1);}//fprintf(fp,"学号   姓名   性别   年龄   电话    总成绩  网费    校园卡余额\n");while(p){//printf("*******\n");//display(p);fprintf(fp,"%s  %s  %c  %d  %s  %d  %d  %d\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.phone,p->data.score,p->data.wangfei,p->data.banlance);p=p->next;    }fclose(fp);}/********************************************************* * 功能描述: 读文件 * 输入描述: 无 * 输出描述:  无 * 返回值  : 无 * 其它说明:运行前把学生信息读到电脑内存中  首先以只读的方式打开文件进行计数 i 然后再把这i个学生信息读入到电脑内存 ************************************************************/ void readStuDentput (LinkList *&L) //运行前把文件内容读取到电脑内存{FILE *fp;    fp=fopen("student.txt","rb"); //以只读方式打开当前目录下的.txt    if(fp==NULL)    {        printf("无法打开文件\n");        exit(0);                   //-------- 终止程序 ---------    }    int i=0;  while(!feof(fp)){//LinkList *p=(LinkList *)malloc(sizeof(LinkList));char nam[10];//名字char nu[10];//学号char s;//性别int ag;//年龄char ph[10];//号码int sc;//成绩int wf;//网费int bal;//余额        //fscanf(fp,"%s %s %c %d %s %d %d %d",p->data.num,p->data.name,&p->data.sex,&p->data.age,p->data.phone,&p->data.score,&p->data.wangfei,&p->data.banlance);        fscanf(fp,"%s %s %c %d %s %d %d %d",nu,nam,&s,&ag,ph,&sc,&wf,&bal);i++;}fclose(fp); FILE *FP;    FP=fopen("student.txt","rb"); //以只读方式打开当前目录下的.txt    if(FP==NULL)    {        printf("无法打开文件\n");        exit(0);                   //-------- 终止程序 ---------    }    int b=i-1;int j=1;while(!feof(FP)){        fscanf(FP,"%s %s %c %d %s %d %d %d",nu,nam,&s,&ag,ph,&sc,&wf,&bal);        //fscanf(FP,"%s %s %c %d %s %d %d %d",n->data.num,n->data.name,&n->data.sex,&n->data.age,n->data.phone,&n->data.score,&n->data.wangfei,&n->data.banlance);   LinkList *n=(LinkList *)malloc(sizeof(LinkList));   strcpy(n->data.num,nu);//把后者的内容拷贝到前者中   strcpy(n->data.name,nam);//把后者的内容拷贝到前者中   n->data.sex=s;   n->data.age=ag;   strcpy(n->data.phone,ph);//把后者的内容拷贝到前者中   n->data.score=sc;   n->data.wangfei=wf;   n->data.banlance=bal;ListInsert(L,n);//插入新的节点n=n->next;    if(j==b)   break;    j++;}    fclose(FP);    //----关闭文件----}



//main.cpp/********************************************************* * 功能描述: 主函数 * 输入描述:管理员账号和密码 * 输出描述: 无 根据选项各有不同 * 返回值  : 0 * 其它说明:首先是清屏  然后暂停十秒 之后是输入信息  如果进入系统此时屏幕会显示不同的颜色并输出相应东西 ************************************************************/ #include <stdio.h>#include "student.h"#include <string.h>#include <stdlib.h>#include <windows.h>#include <string.h> #include <iostream>using namespace std;int main(){    //LinkList *L=NULL;    system("cls");//清屏    welocome();//登陆界面    Sleep(10000);//延缓十秒    mag a;    strcpy(a.zhanghao,"lixiao");//把后者的内容拷贝到前者中     strcpy(a.password,"123");//把后者的内容拷贝到前者中    wel1();//管理员登陆界面    /*    printf("请输入您的账号和密码:\n");    printf("账号: ") ;    scanf("%s",a.zhanghao);    printf("密码:");    scanf("%s",a.password);    printf("●●●●●●●●●●\n");    printf("恭喜%s 已经成为本系统的管理员\n",a.zhanghao);    */    char zh[10];//管理员的账号    char m[10];//密码    printf("请输入管理员登录账号和密码:\n");printf("账号:");    scanf("%s",zh);printf("密码:");    scanf("%s",m);    //判断名字和密码    if((strcmp(zh,a.zhanghao)==0) && (strcmp(m,a.password)==0))    {        carry();//执行阶段    }    else        printf("姓名或密码不对");    return 0;}


运行结果:















1 0
原创粉丝点击