helloxiaoc 发表于 2018-5-26 12:58:55

大一课设xxx管理系统, 简单修改即可食用 0.0

c-free 编译通过,其他的没试

程序只有简单的增、删、查、改的功能,不符合条件的自行修改,代码已经最大化的注释和精简,放心食用

{:5_91:}


/*
* 作者:xiaoc
* 转载请注明出处
*/


#include <windows.h>
#include <iostream>
#include <string>

using namespace std;

#define BUFTONULL while(getchar() != '\n'); // 清空输入的多余非回车字符
#define CLEARSCREEN BUFTONULL system("cls"); // 清空当前屏幕,顺便清空输入的多余非回车字符

struct record // 这是一条包含 编号,姓名 的一条记录
{
        string ID;
        string name;
        record *next;
};

record *myRecord = NULL; // 指向头节点的指针,(因为还没有记录)初始化为NULL

void increaseRecord(); //增加记录
void removeRecord(); //移除记录
void modifyRecord(); //修改记录
void lookupRecord(); //查找记录(按照ID查找)

void printAll(); // 该函数会遍历链表,并将所以记录进行打印
void printOne(const record); // 该函数将打印一条记录 参数是一个结构变量
record* findID(record *,string); //查找一条记录,返回指向该记录的指针,否则返回NULL 参数为要查找的ID ,和查找的初始指针 (不好解释,自己体会)


int main() // ******************************程序将从这里开始执行 **************************************
{
        system("title xxx管理系统,转载请注明出处");
       
        while(TRUE)
        {       
                cout << " 请选择...\n"
                       << "            1 .新 记 录\n"
                       << "            2 .修改记录\n"
                       << "            3 .删除记录\n"
                       << "            4 .查询记录\n"
                       << "            5 . 打印所有记录\n"
                       << "            6 .   退出\n\n >> ";
       
               switch(getchar())
               {
                       case '1':{
                               increaseRecord();
                       }break;
                       
                       case '2':{
                               modifyRecord();
                       }break;
                       
                       case '3':{
                               removeRecord();
                       }break;
                       
                       case '4':{
                               lookupRecord();
                       }break;
                       
                       case '5':{
                               printAll();
                       }break;
                       
                       case '6':{
                               return 0;
                       }
                       default: cout << "请重新选择 ..."; Sleep(500);
               }
               CLEARSCREEN
        }
       
       
        return 0;
}

void increaseRecord()
{
        system("cls");
       
        record *p = new record; // 此处可以用malloc ,为了简洁,本程序用new
       
        cout << "请按照 编号 姓名 格式录入一条记录:\n >> ";
        cin >> p->ID >> p->name;
       
        p->next = myRecord; // 链表节点的添加
        myRecord = p;
       
        cout << "成功录入一条记录 ....";
       
        Sleep(500); // 为了让用户看到上面的提示,延时500毫秒 也可以使用 getchar()
}

void removeRecord()
{
        system("cls");
       
        cout << "输入你要移除的记录的编号,如果找到记录,我们会将其从列表移除:\n >> ";
       
        string ID;
        cin >> ID;
       
        record *p = findID(myRecord, ID);
       
        if(p == NULL)
        {
                cout << "没有找到符合条件的记录 ...";
                BUFTONULL
                return;
        }
        else
        {
                record *rp = p -> next;
                delete(p);
                p = rp;
                cout << "成功移除一条记录 ...";
                Sleep(500); // windows.h 里面的延时函数,参数为毫秒
        }
}

void modifyRecord()
{
        system("cls");
       
        cout << "输入你要修改的记录的编号:\n >> ";
       
        string ID;
        cin >> ID;
       
        record *p = findID(myRecord,ID);
       
        if(p != NULL)
        {
                cout << "找到该记录,请重新录入该条记录的信息:\n >> ";
                cin >> p->ID >> p->name;
        }
       
        cout << "修改成功,回车键继续 ....";
        BUFTONULL
}

void lookupRecord()
{
        system("cls");
       
        cout << "输入要查找的记录ID:\n >> ";
       
        string ID;
        cin >> ID;
       
        record *p = findID(myRecord,ID); // 这里打印所有符合条件的记录信息
        if(p != NULL)
        {
                cout << "找到记录 :";
                printOne(*p);
        }
        else
        {
                cout << "没有找到记录";
        }
       
        cout << "\n按回车键继续 ....";
        BUFTONULL
}

void printAll()
{
        system("cls");
       
        record *p = myRecord;
       
        cout << "所有记录如下:\n\n";
       
        while(p != NULL) // 遍历链表,打印所有记录
        {
                printOne(*p); // 打印一条记录 参数为指向该记录的结构
                p = p->next;
        }
       
        cout << "按回车键记录 ....";
        BUFTONULL
}

void printOne(const record red)
{
        cout << "编号: " << red.ID << "\t姓名: " << red.name << "\n"; // 若记录结构发生改变,要打印请修改此处
}

record* findID(record *p,string ID)
{       
        while(p != NULL) // 同样,遍历链表,找到符合条件的记录并返回
        {
                if(p->ID.compare(ID) == 0) return p;
               
                p = p->next;
        }
        return NULL; // 若上面没有返回,则没有找到记录,返回NULL
}




static/image/hrline/man.gif
作者:xiaoc
转载请注明出处

xiamiracle 发表于 2018-5-27 16:55:44

1

夏笙幽雨泪惊蝉 发表于 2018-5-31 13:38:07

谁的高

苏格拉有底 发表于 2018-6-1 03:01:46

谢谢
页: [1]
查看完整版本: 大一课设xxx管理系统, 简单修改即可食用 0.0