数据结构课程设计

来源:互联网 发布:迅捷绑定mac地址 编辑:程序博客网 时间:2024/06/18 01:28
/************************************************************ 文件名称: 学生信息查询.cpp* 文件标示: 无* 功能简介:增添学生信息、修改删除学生信息、查询统计学生信息* 其他说明:无* 当前版本:v1.0* 作者:孙翰文* 完成日期: 2015.12.24************************************************************/#include <stdio.h>#include <iostream>#include <stdlib.h>#include <string.h>#include <windows.h># define Suh sizeof(struct Student)using namespace std;struct Student {char num[10];char name[20];char sex[2];int chi;int eng;int mat;struct Student *next;};char fiSuhame[90];                     //全局变量,用来保存要打开的文件名字/*生成链表*/struct Student *Creat(int n){    void menu_print_in(void);    struct Student *head;    struct Student *p1, *p2;    system("cls");    for(int i=1;i<n+1;i++)    {        p1 = (struct Student*)malloc(Suh); //将返回的指针强制转换        menu_print_in();        cin>>p1->num>>p1->name>>p1->sex>>p1->chi>>p1->eng>>p1->mat;        p1->next = NULL;        if(i==1)        {            head = p2 = p1;        }        else        {            p2->next = p1;            p2 = p1;        }    }    return(head);}/*学生信息存盘(wb只写)(参考自网络)*/void WriteData_wb(struct Student *head){    FILE *fp;    struct Student *p;    if((fp = fopen(fiSuhame, "wb"))==NULL)    printf("不能打开此文件!");    p = head;    while(p!=NULL)    {        if(fwrite(p,Suh,1,fp)!=1)        {            printf("写入学生信息出错\n");            fclose(fp);            return;        }        p=p->next;    }    fclose(fp);}/*学生信息存盘(ab追加)(参考自网络)*/void WriteData_ab(struct Student *head){    FILE *fp;    struct Student *p;    if((fp = fopen(fiSuhame, "ab"))==NULL)    printf("错误,不能读取文件");    p = head;    while(p!=NULL)    {    if(fwrite(p,Suh,1,fp)!=1)    {            printf("写入学生信息出错\n");            fclose(fp);            return;    }        p=p->next;    }    fclose(fp);}/*读取学生信息*//*读取学生信息文件保存到链表中 ,返回指向此链表头指针*/struct Student *ReadData(void){    struct Student *head = NULL;    struct Student *p1, *p2;    FILE *fp;    if((fp=fopen(fiSuhame,"rb+"))==NULL)    {        printf("打开文件出错\n");        exit(0);    }    while(!feof(fp))    {        if((p1=(struct Student*)malloc(Suh))==NULL)        {            printf("内存申请出错\n");            fclose(fp);            exit(0);        }        if(fread(p1,Suh,1,fp)!=1)        {            free(p1);            break;        }        if(head==NULL)        head=p2=p1;        else        {            p2->next=p1;            p2=p1;        }    }    fclose(fp);    return (head);}/*【1】全量查询*/void Print_inquire_all(void){    void menu_print_out(void);    struct Student *pt;    pt = ReadData();    menu_print_out();    do    {        cout<<pt->num<<pt->name<<pt->sex<<pt->chi<<pt->eng<<pt->mat;        pt = pt->next;    }while(pt!=NULL);    printf("\n");}/*【2】学号查询*/int Print_inquire_num(){    void menu_print_out(void);    struct Student *pt;    char str_num[10];    printf("请输入您要查询的学号:");    cin>>str_num;    pt = ReadData();    menu_print_out();    do    {        if(strcmp(pt->num,str_num)==0)        {            cout<<pt->num<<pt->name<<pt->sex<<pt->chi<<pt->eng<<pt->mat;            printf("\n");            return 0;        }        pt = pt->next;    }    while(pt!=NULL);    printf("学生信息库中没有存储您要查询的学生信息!\n");    printf("\n");    return 0;}/*【3】姓名查询*/int Print_inquire_name(){    void menu_print_out(void);    struct Student *pt;    char str_name[20];    printf("请输入您要查询的姓名:");    cin>>str_name;    pt = ReadData();    menu_print_out();    do    {        if(strcmp(pt->name,str_name)==0)        {            cout<<pt->num<<pt->name<<pt->sex<<pt->chi<<pt->eng<<pt->mat;            printf("\n");            return 0;        }        pt = pt->next;    }while(pt!=NULL);    printf("学生信息库中没有存储您要查询的学生信息!\n");    printf("\n");    return 0;}/*修改数据,记录*/int Delete(){    struct Student *pt1, *pt2, *head;    char str_num[20];    printf("\n请输入要删除的学号:");    scanf("%s", str_num);    pt1 = ReadData();    pt2 = pt1->next;    head = pt1;    while(pt2!=NULL)    {        if(strcmp(pt1->num,str_num)==0)        {            WriteData_wb(pt2);        }        else if(strcmp(pt2->num,str_num)==0)        {            pt1->next = pt2->next;            WriteData_wb(head);        }        pt2 = pt2->next;        pt1 = pt1->next;    }    if(pt2!=NULL)    printf("没有存储要删除的数据!\n");    printf("\n\n");    return 0;}/*【2】修改数据 修改记录*/int Amend(){    void menu_print_in(void);    struct Student *pt1, *pt2, *head;    char str_num[20];    printf("请输入要修改的学号:");    scanf("%s", str_num);    pt1 = ReadData();    pt2 = pt1->next;    head = pt1;    while(pt2!=NULL)    {        if(strcmp(pt1->num,str_num)==0)        {            menu_print_in();            cin>>pt1->num>>pt1->name>>pt1->sex>>pt1->chi>>pt1->eng>>pt1->mat;            WriteData_wb(head);        }        else if(strcmp(pt2->num,str_num)==0)        {            menu_print_in();            cin>>pt2->num>>pt2->name>>pt2->sex>>pt2->chi>>pt2->eng>>pt2->mat;            WriteData_wb(head);        }        pt2 = pt2->next;        pt1 = pt1->next;    }    if(pt2!=NULL)    printf("没有存储要删除的数据!\n");    return 0;}/*【3】修改数据 整理数据*/int Neaten(){    struct Student *first;    struct Student *tail;    struct Student *p_min;    struct Student *min;    struct Student *p;    struct Student *head;        head = ReadData();    first = NULL;    while(head!=NULL)    {        for(p=head,min=head; p->next!=NULL; p=p->next)        {            if(strcmp(p->next->num,min->num)<0)            {                p_min = p;                min = p->next;            }        }        if(first==NULL)        {            first = min;            tail = min;        }        else        {            tail->next = min;            tail = min;        }        if(min==head)        {            head = head->next;        }        else        {            p_min->next = min->next;        }    }    if(first!=NULL)    {        tail->next = NULL;    }    head = first;    WriteData_wb(head);    return 0;}/*输入写入学生信息的数量*/int Creat_num(void){    printf("请输入您此次要添加的学生信息个数:");    int n;    if(scanf("%d", &n)!=1)    {        printf("a error!");    }    return n;}/*选择将要打开的文件*/int File_name(){    printf("\n请输入您想要创建访问的班级:");    if(scanf("%s", fiSuhame)!=1)    printf("\a error!");    return 0;}/*主菜单*/void menu(void){    void menu_add(void);    void menu_inquire(void);    void menu_amend(void);    printf("                 学生信息管理系统    \n");    printf("                                                 \n");    printf(" 【1】添加学生信息           【3】修改学生信息   \n");    printf("                                                 \n");    printf("                                                \n");    printf("                                                 \n");    printf(" 【2】查询学生信息           【4】退出系统       \n");    printf(" \n");    printf("请输入功能前的序号进入相应的工具:【   】\b\b");    int a = 0;    a = getchar();    while(a!='1'&&a!='2'&&a!='3'&&a!='4')    {        printf("error! please input the right number!\n");        putchar('\a');        getchar();        printf("请重新输入功能前的相对应的序号:【   】\b\b");        a = getchar();    }    switch(a)    {        case '1': File_name();menu_add();        break;        case '2': File_name();menu_inquire();        break;        case '3': File_name();menu_amend();        break;        case '4': exit(0);        break;    }    getchar();}/*子菜单添加学生信息*/void menu_add(void){    system("cls");    getchar();    printf("                添加学生信息方式                     \n");    printf("                                                     \n");    printf(" 【1】新建班级文件 【2】增添学生信息 【3】返回菜单  \n");    printf(" \n");    printf(" \n");    printf("请输入功能前的序号进入相应的工具:【   】\b\b");    int a = 0;    a = getchar();    while(a!='1'&&a!='2'&&a!='3')    {        printf("输入错误!请输入正确的选择");        putchar('\a');        getchar();        printf("请重新输入功能前的序号进入相应的工具:【   】\b\b");        a = getchar();    }    switch(a)    {        case '1': WriteData_wb(Creat(Creat_num()));         printf("\n新建文件成功且学生信息已成功保存\n");             system("pause");         system("cls");         menu_add();        break;        case '2': WriteData_ab(Creat(Creat_num()));             printf("\n学生信息已成功添加\n");             system("pause");         system("cls");         menu_add();        break;        case '3': system("cls");         getchar();         menu();        break;    }}/*二级菜单查询学生信息*/void menu_inquire(void){    system("cls");    getchar();    while(1)    {    system("cls");    printf("              查询学生信息方式               \n");    printf("                                             \n");    printf("     【1】精确查询        【2】学号查询      \n");    printf("                                             \n");    printf("                                             \n");    printf("                                             \n");    printf("     【3】姓名查询         【4】返回菜单     \n");    printf("                                             \n");    printf("请输入功能前的序号进入相应的工具:【   】\b\b");    int a = 0;    a = getchar();    while(a!='1'&&a!='2'&&a!='3'&&a!='3'&&a!='4'&&a!='5'&&a!='6')        {            printf("输入有误,请重新输入!【   】\b\b\n");            printf("请输入功能前的序号进入相应的工具:");            putchar('\a');            getchar();            printf("请重新输入功能前的序号进入相应的工具:【   】\b\b");            a = getchar();        }        switch(a)        {            case '1': Print_inquire_all();system("pause");getchar();            break;            case '2': Print_inquire_num();system("pause");getchar();            break;            case '3': Print_inquire_name();system("pause");getchar();            break;            case '4': system("cls");getchar();menu();            break;        }    }}/*二级菜单之修改数据*/void menu_amend(void){    system("cls");    getchar();    while(1)    {    system("cls");    printf("\n");    printf("                修改数据方式                \n");    printf("    【1】删除记录          【3】整理数据    \n");    printf("                                            \n");    printf("    【2】修改记录          【4】返回菜单    \n");    printf("\n");    printf("请输入功能前的序号进入相应的工具:【   】\b\b");    int a = 0;    a = getchar();    while(a!='1'&&a!='2'&&a!='3'&&a!='4')    {        printf("error! please input the right number!\n");        putchar('\a');        getchar();        printf("请重新输入功能前的序号进入相应的工具:【   】\b\b");        a = getchar();    }        switch(a)        {            case '1': Delete();             printf("\n\n已成功删除指定数据\n");             system("pause");             getchar();            break;            case '2': Amend();                 printf("\n\n已成功修改指定数据\n");             system("pause");                 getchar();            break;            case '3': Neaten();             printf("\n\n数据已成功按照学号重新排列\n");             system("pause");             getchar();            break;            case '4': system("cls");             getchar();             menu();            break;        }    }}/*输入输出提示栏*/void menu_print_in(void){    printf("学号      姓名     性别    语文     英语         数学               \n");}void menu_print_out(void){    printf("学号      姓名     性别    语文     英语        数学                 \n");}/*主函数*/int main(void){    SetConsoleTitle("学生信息管理系统");    menu();    return 0;}
0 0
原创粉丝点击