学生信息管理系统

来源:互联网 发布:怎样做数据分析表 编辑:程序博客网 时间:2024/04/30 05:16
/************************************************************版权所有(C)2017,lien。**文件名称:student.project*文件标识:无*内容摘要:无 *其它说明:无*当前版本:V1.0*作者:李恩*完成日期:2017.12.21*修改记录1:*修改日期:2017.12.21*版本号:V1.0*修改人:李恩*修改内容:增加文件

/student.h#ifndef SHTUDENT_H_INCLUDED#define SHTUDENT_H_INCLUDED#include <stdio.h>typedef struct student{ char name[10]; char number[10]; char sex; 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 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 welocome();//首界面void wel1();//管理员登陆界面void carry();//执行阶段#endif // SHTUDENT_H_INCLUDED

/student.cpp#include <windows.h>#include <malloc.h>#include <string.h>#include <stdio.h>#include <stdlib.h>#include <iostream>using namespace std;#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;//余额/********************************************************** 功能描述: 管理员登陆* 输入描述: 无* 输出描述: 无* 返回值  : 无* 其它说明: 输入管理员账号密码,进行相应的操作************************************************************/void wel1()//管理员登陆界面{    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");}/********************************************************** 功能描述: 功能菜单* 输入描述: 无* 输出描述: 无* 返回值  : 无* 其它说明: 根据菜单选择相应的操作************************************************************/void menu()//功能菜单{    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 ;}/********************************************************** 功能描述: 执行操作* 输入描述: 要进行的操作数字* 输出描述: 相应的函数执行情况* 返回值  : 无* 其它说明: 无************************************************************/void carry()//执行阶段{    LinkList *L;    InitList(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.number,"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)//增加新的学生{    printf("请输入学生的信息:\n");    printf("学号:");    scanf("%s",nu);    printf("%s\n",nu) ;    //判断    LinkList *q=L->next;    while(q!=NULL )    {        if(strcmp(q->data.number,nu)==0)        {            printf("该生已存在\n");            break;        }        q=q->next;    }    if(q==NULL)    {        LinkList *p;        InitList(p);        strcpy(p->data.number,nu);//把后者的内容拷贝到前者中        printf("姓名:") ;        scanf("%s",nam) ;        strcpy(p->data.name,nam);//把后者的内容拷贝到前者中        printf("性别:(w为男 m为女)");        scanf(" %c",&s);        p->data.sex=s;        printf("年龄:");        scanf("%d",&ag);        p->data.age=ag;        printf("总成绩:");        scanf("%d",&sc);        p->data.score=sc;        printf("网费:");        scanf("%d",&wf);        p->data.wangfei=wf;        printf("余额:");        scanf("%d",&bal);        p->data.banlance=bal;        printf("电话号码:");        scanf("%s",ph);        strcpy(p->data.phone,ph);//把后者的内容拷贝到前者中        ListInsert(L,p);        saveStuDentFile(L);//保存学生信息到文件    }}/********************************************************** 功能描述: 删除学生* 输入描述: 要删除学生的学号* 输出描述: 此生不存在时会输出“此生不存在” 链表本身为空时会输出"还没有学生信息请增加学生信息"* 返回值  : 无* 其它说明:************************************************************/void deletestu(LinkList *L)//删除某个学生{    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.number,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;    printf("请输入您要修改学生的学号:\n");    scanf("%s",nu);    LinkList *q=L->next;    while(q!=NULL )    {        if(strcmp(q->data.number,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)//按学号查找学生并输出该生信息{    printf("请输入您要查找的学生的学号:");    scanf("%s",nu);    LinkList *q=L->next;    while(q!=NULL )    {        if(strcmp(q->data.number,nu)==0)        {            printf("姓名:%s\n",q->data.name);            printf("学号:%s\n",q->data.number);            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)//输入学号进行充值功能{    int choose;    printf("请输入您要充值的学生的学号:\n");    scanf("%s",&nu);    int money;    LinkList *q=L->next;    while(q!=NULL )    {        if(strcmp(q->data.number,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)//按成绩排序排序 并输出排序后的结果{    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.number,q->data.number);                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.number,p->data.number);                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.number,tmp->data.number);                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)    {        printf(" 学号:%s 名字:%s 年龄:%d 性别:%c 电话号码:%s  总成绩:%d  网费: %d  校园卡余额:%d \n",q->data.number,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;    LinkList *p=L->next;    if((fp=fopen("student.txt","w"))==NULL)// 以可写的方式打开当前目录下的.txt    {        printf("Can not open the file,press any key exit!");        exit(1);    }    while(p)    {        fprintf(fp,"%s  %s  %c  %d  %s  %d  %d  %d\n",p->data.number,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);}

/main#include <iostream>#include <stdio.h>#include "student.h"#include <string.h>#include <stdlib.h>#include <windows.h>#include <string.h>using namespace std;int main(){system("cls");//清屏mag a;strcpy(a.zhanghao,"lien");//把后者的内容拷贝到前者中strcpy(a.password,"1234");//把后者的内容拷贝到前者中wel1();//管理员登陆界面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();//执行阶段}elseprintf("姓名或密码不对");return 0;}

原创粉丝点击