数据结构课程设计——CET-6报名管理系统

/*                      
 * Copyright (c) 2017,烟台大学计算机学院                  
 * All right reserved.                      
 * 文件名称:DS+           
 * 作者:尹娜                     
 * 完成日期:2017年12月21日                      
 * 版本号:v1.0                                       
 * 问题描述:CET-6考试报名管理系统
 * 输入描述:考生信息输入                     
 * 程序输出:测试结果输出      
*/

1.头文件:DS+.h

typedef struct student
{
    char name[20];考生姓名
    char num[20];/考生准考证号
    char  id[20];/考生身份证号
    int score;/四级成绩

}ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
} LinkList;
void InitList(LinkList *&L);//初始化线性表
void DestroyList(LinkList *&L);//销毁线性表
void CreateListR(LinkList *&L);///尾插法创建
void displist(LinkList *L);/显示考生信息(输出线性表)
void SortList(LinkList *&L);//排序考生信息(按准考证号/四级成绩排序)
void LocateElem(LinkList *L);/查询考生信息(按元素值查找,(准考证号))
void change(LinkList *&L);修改考生信息
void Delete(LinkList *&L);/删除考生信息
void menu();///创建菜单
void display(LinkList *&L);显示菜单
void writedata(LinkList *&L);


2.主函数:main.cpp

#include<iostream>
using namespace std;
#include<windows.h>
#include"DS+.h"
/***********************************************************
* 功能描述:主函数
* 输入参数:无
* 输出参数:系统首页
* 返回值  :无
* 其他说明:无
************************************************************/
int main()
{
    system("color 1B");
    cout<<endl;
    cout<<endl;
    cout<<endl;
    cout<<endl;
    cout<<endl;
    cout<<endl;
    cout<<endl;
    cout<<endl;
    cout<<"\t\t\t\t★☆★☆★☆★☆★☆★☆★☆★☆★☆★"<<endl;
    cout<<"\t\t\t\t☆ ☆"<<endl;
    cout<<"\t\t\t\t★ ***********************★"<<endl;
    cout<<"\t\t\t\t☆ *欢迎进入 CET-6考试报名管理系统!*☆"<<endl;
    cout<<"\t\t\t\t★ ***********************★"<<endl;
    cout<<"\t\t\t\t☆ ☆"<<endl;
    cout<<"\t\t\t\t★☆★☆★☆★☆★☆★☆★☆★☆★☆★"<<endl;
    system("pause");
    system("cls");
    LinkList *L;
    InitList(L);//初始化线性表
    display(L);///显示菜单
    DestroyList(L);/销毁线性表
    return 0;
}

3.外部函数:DS+.cpp

#include<iostream>
#include<string.h>
#include<malloc.h>
#include<cstring>
#include <conio.h>//用getch();
#include<fstream>//文件
#include<windows.h>//颜色
#include"DS+.h"
using namespace std;
ElemType e;
/***********************************************************
* 功能描述:初始化线性表
* 输入参数:链表L
* 输出参数:无
* 返回值  :无
* 其他说明:无
************************************************************/
void InitList(LinkList*&L)
{
    L=(LinkList*)malloc(sizeof(LinkList));
    L->next=NULL;//创建头结点,其next域置为NULL
}
/***********************************************************
* 功能描述:销毁线性表
* 输入参数:链表L
* 输出参数:空链表
* 返回值  :无
* 其他说明:无
************************************************************/
void DestroyList(LinkList*&L)
{
    LinkList*p=L,*q=p->next;//p指向q的前驱节点
    while(q!=NULL)//扫描单链表
    {
        free(p);//释放p节点
        p=q;//p, q同步后移一个节点
        q=p->next;
    }
    free(p);//循环结束时,q为NULL,p指向尾节点,释放p
    cout<<"\t\t\t此链表为空,请重新选择,创建链表"<<endl;
}
/***********************************************************
* 功能描述:采用尾插法增加考生信息
* 输入参数:该链表的总人数n
* 输出参数:无
* 返回值  :无
* 其它说明:无
************************************************************/
void CreateListR(LinkList*&L)
{
    int i,n;//n为报考人数
    ofstream file("考生信息.txt",ios::app);
    if(!file)
    {
        cerr<<"文件打开失败。出现未知错误。"<<endl;
        exit(1);
    }
    LinkList *p=L,*s;//p始终是尾节点,s为要插入节点
    L=(LinkList*)malloc(sizeof(LinkList));
    p=L;
    cout<<"\t\t\t请输入报考人数:";
    cin>>n;
    for(i=0; i<n; i++)
    {
        s=(LinkList*)malloc(sizeof(LinkList));
        cout<<"\t\t\t请输入四级成绩:";
        cin>>s->data.score;
        if(s->data.score<425)
        {
            cout<<"\t\t\t对不起,您暂时不能报考六级考试:"<<endl;
        }
        else
        {
            {
                cout<<"\t\t\t请输入姓名:";
                cin>>s->data.name;
                cout<<"\t\t\t请输入准考证号:";
                cin>>s->data.num;
                cout<<"\t\t\t请输入身份证号:";
                cin>>s->data.id;
                file<<"姓名"<<"\t"<<"准考证号"<<"\t\t"<<"身份证号"<<"\t\t"<<"四级成绩"<<"\n";
                file<<s->data.name<<"\t"<<s->data.num<<"\t\t"<<s->data.id<<"\t\t"<<s->data.score<<"\n";
                p->next=s;//将节点s插入到p后边
                p=s;
            }
            p->next=NULL;//尾节点的next置为NULL
            cout<<"\t\t\t报名成功"<<endl;
        }
    }
    file.close();
}
/***********************************************************
* 功能描述:显示考生信息
* 输入参数:无
* 输出参数:考生信息
* 返回值  :无
* 其它说明:无
************************************************************/
void displist(LinkList*L)
{
    int i=0;
    LinkList *p=L->next;//p指向首节点
    if(p==NULL)
    {
        cout<<"\t\t\t无考生信息"<<endl;
    }
    while(p!=NULL)//循环链表
    {
        cout<<"\t\t\t姓名:"<<p->data.name<<endl;
        cout<<"\t\t\t准考证号:"<<p->data.num<<endl;
        cout<<"\t\t\t身份证号:"<<p->data.id<<endl;
        cout<<"\t\t\t四级成绩:"<<p->data.score<<endl;
        p=p->next;//p后移
        i++;//人数加一
    }
    cout<<"\t\t\t六级报考总人数:"<<i<<"人"<<endl;
    cout<<endl;
}
/***********************************************************
* 功能描述:排序考生信息(根据准考证号或者四级成绩排序)
* 输入参数:排序后的考生信息
* 输出参数:无
* 返回值  :无
* 其他说明:无
************************************************************/
void SortList(LinkList*&L)
{
    LinkList *p=L->next,*q,*r;
    if(p==NULL)
    {
        cout<<"\t\t\t无考生信息"<<endl;
    }
    else
    {
        for(p=L->next; p!=NULL; p=p->next)//遍历链表
        {
            r=p;//记录最小值
            q=p->next;
            for(q=p->next; q!=NULL; q=q->next)//在无序区找小于r的元素
            {
                int x;
                cout<<"\t\t\t请选择排序类型:"<<endl;
                cout<<"\t\t\t1.按准考证号排序 2.按四级成绩排序 请选择:";
                cin>>x;
                switch(x)
                {
                    case 1:
                    if(strcmp(q->data.num,r->data.num)<0);//按考生准考证号比较
                    break;
                    case 2:
                    if(q->data.score<r->data.score);//按四级成绩排序
                    break;
                }
                r=q;//记录无序区中最小值
            }
            if(r!=p)//r ,p 两元素交换
            {
                ElemType tmp;
                tmp=p->data;
                p->data=r->data;
                r->data=tmp;
            }
        }
        displist(L);
    }
    writedata(L);//写入文件
}
/***********************************************************
* 功能描述:查询考生信息
* 输入参数:要查找的准考证号e.num
* 输出参数:考生信息
* 返回值  :无
* 其他说明:无
************************************************************/
void LocateElem(LinkList*L)
{
    LinkList*p=L->next;
    if(p==NULL)
        cout<<"\t\t\t无考生信息"<<endl;
    else
    {
        cout<<"\t\t\t请输入准考证号:";
        cin>>e.num;
        while(p!=NULL&&(strcmp(p->data.num,e.num)>0||strcmp(p->data.num,e.num)<0))//遍历链表,比较
        {
            p=p->next;
        }
        if(p==NULL)
        {
            cout<<"\t\t\t未找到该考生准考证号";
        }
        else
        {
            cout<<"\t\t\t姓名:"<<p->data.name<<endl;
            cout<<"\t\t\t准考证号:"<<p->data.num<<endl;
            cout<<"\t\t\t身份证号:"<<p->data.id<<endl;
            cout<<"\t\t\t四级成绩:"<<p->data.score<<endl;
        }
    }
}
/***********************************************************
* 功能描述:修改考生信息
* 输入参数:要修改的考生的姓名,身份证号
* 输出参数:修改成功
* 返回值  :无
* 其他说明:无
************************************************************/
void change(LinkList*&L)
{
    LinkList*p=L;//p指向头节点
    if(p->next==NULL)
    {
        cout<<"\t\t\t无考生信息"<<endl;
    }
    else
    {
        cout<<"\t\t\t请输入要修改人的准考证号:";
        cin>>e.num;//输入准考证号
        while(p!=NULL&&(strcmp(p->data.num,e.num)>0||strcmp(p->data.num,e.num)<0))//遍历链表,比较
        {
            p=p->next;
        }
        if(p==NULL)
        {
            cout<<"\t\t\t未找到该考生准考证号"<<endl;
        }
        else
        {
            cout<<"\t\t\t输出修改前的考生信息"<<endl;
            LocateElem(L);
            cout<<"\t\t\t请再次输入要修改人的准考证号:";
            cin>>e.num;
            if((strcmp(p->data.num,e.num)==0))
            {
                cout<<"\t\t\t请输入要修改的姓名:";
                cin>>p->data.name;
                cout<<"\t\t\t请输入要修改的身份证号:";
                cin>>p->data.id;
                cout<<"\t\t\t修改成功"<<endl;
                cout<<"\t\t\t输出修改后的学生信息:"<<endl;
                LocateElem(L);
            }
            else
            {
                cout<<"\t\t\t输入考号不同,不能修改,请重新输入"<<endl;
                change(L);//递归修改
            }
        }
    }
    writedata(L);
}
/***********************************************************
* 功能描述:删除考生信息
* 输入参数:要删除的考生的准考证号e.num
* 输出参数:删除成功
* 返回值  :无
* 其他说明:无
************************************************************/
void Delete(LinkList*&L)
{
    LinkList*p=L,*q;
    if(p->next==NULL)
    {
        cout<<"\t\t\t无考生信息"<<endl;
    }
    else
    {
        cout<<"\t\t\t请输入要删除的考生准考证号:";
        cin>>e.num;
        while(p->next!=NULL&&(strcmp(p->next->data.num,e.num)>0||strcmp(p->next->data.num,e.num)<0))//找与此准考证号相等的前一个节点
        {
            p=p->next;
        }
        if(p->next==NULL)
        {
            cout<<"\t\t\t未找到该考生准考证号";
        }
        else
        {
            q=p->next;//q指向存要删除考生信息的节点
            if(q==NULL)
            {
                cout<<"\t\t\t未找到该考生准考证号";
            }
            e=q->data;
            p->next=q->next;//从链表中删除q
            free(q);//释放节点q
            cout<<"\t\t\t删除成功"<<endl;
        }
    }
    writedata(L);
}
/***********************************************************
* 功能描述:菜单函数
* 输入参数:无
* 输出参数:无
* 返回值  :无
* 其他说明:无
************************************************************/
void menu()
{
    system("color 1B");
    cout<<endl;
    cout<<endl;
    cout<<endl;
    cout<<"\t\t\t\t◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆"<<endl;
    cout<<"\t\t\t\t║                                                ║"<<endl;
    cout<<"\t\t\t\t║ ╳╳╳╳╳╳╳╳╳╳ ★CET-6考试报名管理系统★ ╳╳╳╳╳╳╳╳╳ ║"<<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║ ╳╳╳╳╳╳╳╳╳╳╳╳╳╳ 0.安全退出系统 ╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳ ║"<<endl;
    cout<<"\t\t\t\t║                                                ║"<<endl;
    cout<<"\t\t\t\t◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆"<<endl;
    cout<<"\n\t\t\n\t\t\t请选择:";
}
/***********************************************************
* 功能描述:功能选择函数
* 输入参数:功能序号
* 输出参数:无
* 返回值  :无
* 其他说明:无
************************************************************/
void display(LinkList*&L)
{
    while(true)
    {
        menu();
        int x;
        cin>>x;
        switch(x)
        {
        case 1:
            CreateListR(L);//增加考生信息
            break;
        case 2:
            displist(L);//显示考生信息
            break;
        case 3:
            SortList(L);//排序考生信息
            break;
        case 4:
            LocateElem(L);//查询考生信息
            break;
        case 5:
            change(L);//修改考生信息
            break;
        case 6:
            Delete(L);//删除考生信息
            break;
        case 0:
            {
                system("cls");
                cout<<endl;
                cout<<endl;
                cout<<endl;
                cout<<endl;
                cout<<endl;
                cout<<endl;
                cout<<endl;
                cout<<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;
                exit(0);
                break;
            }
        }
    }
}
/***********************************************************
* 功能描述:文件函数(将考生信息录入文件)
* 输入参数:无
* 输出参数:无
* 返回值  :无
* 其他说明:无
************************************************************/
void writedata(LinkList*&L)
{
    LinkList*p=L->next;
    ofstream file("考生信息.txt",ios::out|ios::ate);
    if(!file)
    {
        cerr<<"文件打开失败。"<<endl;
        exit(0);
    }
    while(p!=NULL)
    {
        file<<"姓名"<<"\t"<<"准考证号"<<"\t"<<"身份证号"<<"\t"<<"四级成绩"<<endl;
        file <<p->data.name<<"\t"<<p->data.num<<"\t"<<p->data.id<<"\t"<<p->data.score<<endl;//将输入的考生信息存入文件中
        p=p->next;
    }
    file.close();
}

运行结果:

开始界面:


(1)增加考生信息


文件:


(2)显示考生信息


(4)查询考生信息


(5)修改考生信息


文件:


(3)排序考生信息

a.根据考生准考证号排序:


文件:


b.根据四级成绩排序:


文件:


(6)删除考生信息:


(0)结束界面:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

promise~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值