学生信息管理系统

来源:互联网 发布:淘宝订单业务流程 编辑:程序博客网 时间:2024/05/20 00:35
/*  * Copyright (c) 2016,烟台大学计算机与控制工程学院  * All rights reserved.  * 文件名称:main.cpp  * 作    者:赵志君  * 完成时间:2016年6月30日  * 版 本 号:v1.0 * * 问题描述:学生信息管理系统 */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>#include <iostream>#include <fstream>using namespace std;#define N 50   //数据量int m = 0;struct Student   ///结构体{    int number;         //学号   结构: 年纪-班级-编号    char name[20];      //姓名    int age;            //年龄    char sex;           //性别    char birthday[20];  //出生日期    char address[20];   //地址    char tel[20];       //电话    char eMail[20];     //E-mail}stu[N];void sift(int *grade,int *classGrade,int *number)    ///拆分学号{    for(int j=0;j<m;j++)    {        int temp=stu[j].number,t=0;        for(int i=0;i<8;i++)   //学号倒置        {            t=temp%10+t*10;            temp=temp/10;        }        //分离出年级        grade[j]=0;        for(int i=0;i<4;i++)        {            grade[j]=grade[j]*10+t%10;            t=t/10;        }        //分离出班级        classGrade[j]=0;        for(int i=0;i<2;i++)        {            classGrade[j]=classGrade[j]*10+t%10;            t=t/10;        }        //分离出编号        number[j]=0;        for(int i=0;i<2;i++)        {            number[j]=number[j]*10+t%10;            t=t/10;        }    }}void rank_information()           ///信息按学号进行排序{    Student temp;    for(int i=0; i<m-1; i++)    {        for(int j=i+1; j<m; j++)        {            if(stu[i].number>stu[j].number)            {                temp=stu[i];                stu[i]=stu[j];                stu[j]=temp;            }        }    }}void showInfo(int i)          ///信息显示{    printf("\n学号:%7d      姓名:%s\n",stu[i].number,stu[i].name);    printf("年龄:%-7d       性别:%c\n",stu[i].age,stu[i].sex);    printf("出生日期:%s\n",stu[i].birthday);    printf("地址:%s\n",stu[i].address);    printf("电话:%s\n",stu[i].tel);    printf("E-mail:%s\n",stu[i].eMail);}void save()           ///信息写入文件  先排序 后写入{    rank_information();   //排序    ofstream outfile("Student.txt");    for(int i=0; i<m; i++)    {        outfile<<stu[i].number<<" "<<stu[i].name<<" "<<stu[i].age<<" "<<stu[i].sex               <<" "<<stu[i].birthday<<" "<<stu[i].address<<" "<<stu[i].tel<<" "<<stu[i].eMail;        if(i!=m-1)            outfile<<endl;        if(m==0)            break;    }    outfile.close();}void input_information()              ///信息录入{    printf("注:学号必须输入,没有的信息请用“ 0 ”替代。\n");    printf("请输入要录入的学生信息\n  学号   姓名  年龄 性别  出生日期   地址        电话       E-mail\n");    scanf("%d %s %d %c %s %s %s %s",&stu[m].number,stu[m].name,&stu[m].age,&stu[m].sex,          stu[m].birthday,stu[m].address,stu[m].tel,stu[m].eMail);    if(m==0)    {        m++;        save();        printf("信息写入文件成功!\n");        printf("输入任意键继续:");        getch();        return;    }    for(int i=0; i<m; i++)    {        if(stu[i].number==stu[m].number)        {            printf("此学生已存在,请确认信息后再录入!\n");            return;        }        else if(i==m-1)        {            m++;            save();            printf("信息写入文件成功!\n");            printf("输入任意键继续:");            getch();            return;        }    }}void showInformation()                  ///筛选查询信息{    int n,a,k1,k2,k3;    char ch[2],c,dizhi[10];    while(1)    {        system("cls");        printf("\n\t\t\t***************************************************************\n");        printf("\t\t\t*********         1.学号筛选       4.性别筛选         *********\n");        printf("\t\t\t*********         2.姓名筛选       5.地址筛选         *********\n");        printf("\t\t\t*********         3.年龄筛选       6.全部显示         *********\n");        printf("\t\t\t*********                   0.退出                    *********\n");        printf("\t\t\t***************************************************************\n");        printf("请输入您要筛选的方式:");        while(1)        {            scanf("%d",&n);            fflush(stdin);   //防输错            if(n>=0 && n<=7)                break;            printf("输入有误,请重新输入筛选方式:");        }        switch(n)        {        case 0:            return;        case 1:            system("cls");            printf("\n\t\t\t***************************************************************\n");            printf("\t\t\t*********         1.年级         5.年级+编号          *********\n");            printf("\t\t\t*********         2.班级         6.年级+班级+编号     *********\n");            printf("\t\t\t*********         3.编号         7.范围筛选           *********\n");            printf("\t\t\t*********         4.年级+班级    0.退出               *********\n");            printf("\t\t\t***************************************************************\n");            printf("请输入您要筛选的方式:");            while(1)            {                scanf("%d",&a);                fflush(stdin);   //防输错                if(n>=0 && n<=7)                    break;                printf("输入有误,请重新输入筛选方式:");            }            int grade[N],classGrade[N],number[N];            sift(grade,classGrade,number);            switch(a)            {            case 0:                break;            case 1:                printf("请输入您要筛选的年级:");                scanf("%d",&k1);                for(int i=0; i<m; i++)                {                    if(grade[i]==k1)                    {                        showInfo(i);                    }                }                break;            case 2:                printf("请输入您要筛选的班级:");                scanf("%d",&k1);                for(int i=0; i<m; i++)                {                    if(classGrade[i]==k1)                    {                        showInfo(i);                    }                }                break;            case 3:                printf("请输入您要筛选的编号:");                scanf("%d",&k1);                for(int i=0; i<m; i++)                {                    if(number[i]==k1)                    {                        showInfo(i);                    }                }                break;            case 4:                printf("请输入您要筛选的年级和班级:");                scanf("%d%d",&k1,&k2);                for(int i=0; i<m; i++)                {                    if(grade[i]==k1 && classGrade[i]==k2)                    {                        showInfo(i);                    }                }                break;            case 5:                printf("请输入您要筛选的年级和编号:");                scanf("%d%d",&k1,&k2);                for(int i=0; i<m; i++)                {                    if(grade[i]==k1 && number[i]==k2)                    {                        showInfo(i);                    }                }                break;            case 6:                printf("请输入您要筛选的年级、班级和编号:");                scanf("%d%d%d",&k1,&k2,&k3);                for(int i=0; i<m; i++)                {                    if(grade[i]==k1 && classGrade[i]==k2 && number[i]==k3)                    {                        showInfo(i);                    }                }                break;            case 7:                printf("请输入您要筛选的范围(a<b):");                scanf("%d%d",&k1,&k2);                for(int i=0; i<m; i++)                {                    if(stu[i].number>=k1 && stu[i].number<=k2)                    {                        showInfo(i);                    }                }                break;            default:                printf("指令错误!");            }            break;        case 2:            char ch[2];            printf("请输入您要筛选的姓氏:");            cin>>ch;            for(int i=0; i<m; i++)            {                if(ch[0]==stu[i].name[0] && ch[1]==stu[i].name[1])                    showInfo(i);            }            break;        case 3:            system("cls");            printf("\n\t\t\t***************************************************************\n");            printf("\t\t\t*********        1.具体年龄        2.年龄范围         *********\n");            printf("\t\t\t***************************************************************\n");            printf("请输入您要筛选类型:");            scanf("%d",&k1);            if(k1==1)            {                printf("请输入您要筛选的年龄:");                scanf("%d",&k2);                for(int i=0; i<m; i++)                {                    if(k2==stu[i].age)                        showInfo(i);                }            }            else if(k1==2)            {                printf("请输入您要筛选的年龄范围(a<b):");                scanf("%d%d",&k2,&k3);                for(int i=0; i<m; i++)                {                    if(stu[i].age>=k2 && stu[i].age<=k3)                        showInfo(i);                }            }            break;        case 4:            printf("请输入您要筛选的性别:");            scanf("%c",&c);            for(int i=0; i<m; i++)            {                if(c==stu[i].sex)                {                    showInfo(i);                }            }            break;        case 5:            printf("请输入您要筛选的地址:");            cin>>dizhi;            for(int i=0; i<m; i++)            {                if(!strcmp(dizhi,stu[i].address))                {                    showInfo(i);                }            }            break;        case 6:            for(int i=0; i<m; i++)            {                showInfo(i);            }            break;        }        printf("输入任意键继续:");        getch();    }}void query()                    ///精准查询信息{    int k,num;    char nam[20];    if(m>0)    {        system("cls");        printf("\n\t\t\t***************************************************************\n");        printf("\t\t\t*********         1.按学号查询       4.按邮箱查询     *********\n");        printf("\t\t\t*********         2.按姓名查询       0.退出           *********\n");        printf("\t\t\t*********         3.按电话查询                        *********\n");        printf("\t\t\t***************************************************************\n");        printf("请输入指令:");        while(1)        {            scanf("%d",&k);            fflush(stdin);   //防输错            if(k>=0 && k<=4)                break;            printf("输入指令有误,请重新输入指令:");        }        while(1)        {            if(k==0)                return;            else if(k==1)       //按学号查询学生信息            {                printf("请输入要查询的学号:");                scanf("%d",&num);                if(num==0)                    return;                for(int i=0; i<m; i++)                {                    if(stu[i].number==num)                    {                        showInfo(i);                        printf("输入任意键继续:");                        getch();                        return;                    }                    else if(i==m-1)                        printf("未查到该学生信息!\n");                }            }            else if(k==2)       //按姓名查询学生信息            {                printf("请输入要查询的学生姓名:");                scanf("%s",nam);                if(nam[0]=='0')                    return;                for(int i=0; i<m; i++)                {                    if(!strcmp(nam,stu[i].name))                    {                        showInfo(i);                        printf("输入任意键继续:");                        getch();                        return;                    }                    else if(i==m-1)                        printf("未查到该学生信息\n");                }            }            else if(k==3)       //按电话查询学生信息            {                printf("请输入要查询的学生电话:");                scanf("%s",nam);                if(nam[0]=='0')                    return;                for(int i=0; i<m; i++)                {                    if(!strcmp(nam,stu[i].tel))                    {                        showInfo(i);                        printf("输入任意键继续:");                        getch();                        return;                    }                    else if(i==m-1)                        printf("未查到该学生信息\n");                }            }            else if(k==4)       //按邮箱查询学生信息            {                printf("请输入要查询的学生邮箱:");                scanf("%s",nam);                if(nam[0]=='0')                    return;                for(int i=0; i<m; i++)                {                    if(!strcmp(nam,stu[i].eMail))                    {                        showInfo(i);                        printf("输入任意键继续:");                        getch();                        return;                    }                    else if(i==m-1)                        printf("未查到该学生信息\n");                }            }            else                printf("请输入正确的指令!");        }    }    else        printf("系统无数据!\n");}void delate()                  ///删除学生信息{    int num,i,k;    printf("请输入您要删除的学生学号:");    scanf("%d",&num);    for(i=0; i<m; i++)    {        if(stu[i].number==num)        {            while(1)            {                showInfo(i);                printf("确认删除此学生信息?  1.确认   2.取消\n");                scanf("%d",&k);                if(k==1)                {                    for(int j=i; j<m-1; j++)                        stu[j]=stu[j+1];                    m--;                    save();                    printf("学生信息删除成功!\n");                    return;                }                else if(k==2)                    break;                else                    printf("请输入正确的指令!\n");            }        }        else if(i==m-1)            printf("不存在该学生信息!\n");    }}void information_changes()               ///学生信息的修改{    int num,k;    char ch[20],s;    while(1)    {        printf("请输入您要修改的学生学号:");        scanf("%d",&num);        fflush(stdin);        if(num==0)            return;        for(int i=0; i<m; i++)        {            if(stu[i].number==num)            {                showInfo(i);                printf("1、学号       2、姓名    3、年龄    4、性别\n");                printf("5、出生日期   6、地址    7、电话    8、E-mail    0、退出\n");                printf("请输入您要修改的内容:");                while(1)                {                    scanf("%d",&k);                    fflush(stdin);   //防输错                    if(k>=0 && k<=5)                        break;                    printf("输入指令有误,请重新");                    printf("输入您的指令:");                }                switch(k)                {                case 0:                    return;                case 1:                    printf("请输入要修改的学号:");                    scanf("%d",&num);                    stu[i].number=num;                    break;                case 2:                    printf("请输入要修改的姓名:");                    scanf("%s",ch);                    strcpy(stu[i].name,ch);                    break;                case 3:                    printf("请输入要修改的年龄:");                    scanf("%d",&num);                    stu[i].age=num;                    break;                case 4:                    printf("请输入要修改的性别:");                    scanf("%c",&s);                    stu[i].sex=s;                    break;                case 5:                    printf("请输入要修改的出生日期:");                    scanf("%s",ch);                    strcpy(stu[i].birthday,ch);                    break;                case 6:                    printf("请输入要修改的地址:");                    scanf("%s",ch);                    strcpy(stu[i].address,ch);                    break;                case 7:                    printf("请输入要修改的电话:");                    scanf("%s",ch);                    strcpy(stu[i].tel,ch);                    break;                case 8:                    printf("请输入要修改的E-mail:");                    scanf("%s",ch);                    strcpy(stu[i].eMail,ch);                    break;                }                if(k>=0 && k<=8)                {                    printf("信息修改成功!\n");                    save();                    printf("输入任意键继续:");                    getch();                }                return;            }            else if(i==m-1)            {                printf("不存在该学生信息!\n");                break;            }        }    }}int main(){    int n,z=1;    ifstream infile("Student.txt");          ///文件内无内容会出错    if(!infile)    {        cout<<"没有数据文件!\n";        ofstream outfile("Student.txt");        outfile.close();    }    else    {        int i = 0;        while(!infile.eof())        {            infile>>stu[i].number>>stu[i].name>>stu[i].age>>stu[i].sex                  >>stu[i].birthday>>stu[i].address>>stu[i].tel>>stu[i].eMail;            m++;            ++i;        }        infile.close();        save();    }    while(1)            //主系统部分    {        if(z!=1)    //第一次不出现        {            system("cls");    //清空界面        }        printf("\n\t\t\t***************************************************************\n");        printf("\t\t\t************ Student Management Information System ************\n");        printf("\t\t\t***************************************************************\n");        printf("\t\t\t*********       1.输入信息           4.删除信息       *********\n");        printf("\t\t\t*********       2.筛选查找信息       5.修改信息       *********\n");        printf("\t\t\t*********       3.精准查找信息       0.退出系统       *********\n");        printf("\t\t\t***************************************************************\n");        printf("\t\t\t********************* 系统已有学生数: %2d *********************\n",m);        printf("\t\t\t***************************************************************\n");        printf("输入您的指令:");        z=2;//清屏        while(1)        {            scanf("%d",&n);            fflush(stdin);   //防输错            if(n>=0 && n<=5)                break;            printf("输入指令有误,请重新输入您的指令:");        }        switch(n)        {        case 0:            break;        case 1:            input_information();            break;        case 2:            showInformation();            break;        case 3:            query();            break;        case 4:            delate();            break;        case 5:            information_changes();            break;        default:            printf("请输入 0-5 命令\n");        }        if(n==0)            break;    }    return 0;}


附:测试数据

20153123 孙芳 20 F 1996.9.1 上海 17853539999 sun123@163.com
20164101 张三 18 F 1998.7.1 烟台 17853535555 zhang123@163.com
20154101 王五 18 F 1993.8.1 济南 17853535555 wang123@163.com
20165215 赵子琳 22 M 1994.10.1 潍坊 17853537777 zhao123@163.com
20153223 秦含含 20 M 1996.9.1 北京 17853539999 qin123@163.com
20155215 刘志 22 M 1994.10.1 临沂 17853531111 liu123@163.com
20164105 张也 19 M 1992.8.1 大连 17853542222 zhang1234@163.com
20154116 孙超 16 1998.11.11 南京 17853543333 sun1234@qq.com
20154105 李四 19 M 1997.9.1 德州 17853536666 li123@163.com


心得体会:

    此程序最大的特点是运用C++将系统数据和本地文件实现了对等同步,但还存在很大的不足,需要后期的不断完善。

注:对错误指令的处理有待完善,错误数据无法检测。

        在文件为空时会在文件中产生乱码,影响数据分析。

2 0
原创粉丝点击