欢迎使用CSDN-markdown编辑器

自己写的一点小玩意,共享一下源码,希望能帮助大家!如有不足望大家见谅!

这里写图片描述

#include”iostream”
#include”fstream”
#include “string”

onst int STUDENT_PHONE = 11;
const char MAN = ‘1’;
const char WOAMN = ‘0’;

//课程结构体
typedef struct course * courseNext;
struct course {
string number;
string name;
string time;
courseNext next;
};

//学生结构体
typedef struct node * sutdent;
struct node {
string number;
string name;
string className;
char gerder;
string phoneNumber;
sutdent next;
};

//多表操作 ,联系学生与课程,实现数据的,多对多的结构;
typedef struct nodeAndCourse * nodeAndCourseNext;
struct nodeAndCourse {
string numberOfStudentId;
string numberOfCourseId;
nodeAndCourseNext next;
};

//判断学号string number是否是合法的;

bool isnumberOfStudent(string number) {
int len = number.size();
if (len != STUDENT_NUMBER) {
return false;
}
int i;
for (i = 0; i < len; i++) {
if (number.at(i) < ‘0’ || number.at(i) > ‘9’) {
return false;
}
}
return true;
}

//判断是否是合法的电话号码
bool isPhoneOfStudent(string phone) {
int len = phone.size();
if (len != STUDENT_PHONE){
return false;
}
int i;
for (i = 0; i < len; i++) {
if (phone.at(i) < ‘0’ || phone.at(i) > ‘9’) {
return false;
}
}
return true;
}

//打印所有课程信息
void printCourseAll(course *courseList) {

course *p;
p = courseList->next;
cout << "编    号\t\t" << "课程名字\t\t\t" << "上课时间\n";
while (p != NULL) {
    cout << " " << p->number << "\t\t";
    cout << p->name << "\t\t\t";
    cout << p->time << "\n";
    p = p->next;
}

}

//查看当前的学生是否已经选修了当前课程,存在返回true,反之返回false;
bool isExistenceOfcourse(string numberOfCourse, node *studnet, nodeAndCourse *nodeAndCourseList) {
nodeAndCourse *p;
p = nodeAndCourseList->next;
while (p != NULL) {
if (numberOfCourse == p->numberOfCourseId && studnet->number == p->numberOfStudentId) {
return true;
}
p = p->next;
}
return false;
}

//添加学生编号和课程编号到辅助文件中,
void addCourse(node *student, nodeAndCourse *nodeAndCourseList, course *courseList) {
string number;
while (true) {
cout << “请输入对应课程编号:”;
cin >> number;
if (isExistenceOfcourse(number, student, nodeAndCourseList)) {
cout << “该学生已经选修了该课程,请选择其他课程!\n”;
}
else {
break;
}
}

course *p;
p = courseList;

nodeAndCourse *q, *too;
q = nodeAndCourseList;
while (p != NULL) {
    if (number == p->number) {
        too = new nodeAndCourse;
        too->numberOfCourseId = number;
        too->numberOfStudentId = student->number;
        too->next = q->next;
        q->next = too;
        cout << "添加成功!\n";
        return;
    }
    p = p->next;
}
cout << "没有对应的课程,请按照指令输入!\n";

}

//便利学生,查看当前的学号是否存在,存在返回true,反之返回false;
bool isExistenceOfnumber(string number, node *list) {
node *p;
p = list->next;
while (p != NULL) {
if (number == p->number) {
return true;
}
p = p->next;
}
return false;
}

//添加学生信息(包括基本信息 和 课程信息)
void insert(node *list, nodeAndCourse *nodeAndCourseList, course *courseList) {
int isconduct = 1;
node *p;
p = list;
node *student;
string number;
while (true) {
student = new node;
while (true) {
cout << “请输入学生学号(由6位纯数字组成):”;
cin >> number;
if (isExistenceOfnumber(number, list)) {
cout << “该学号已经存在,请重新输入!\n”;
}
else if (!isnumberOfStudent(number)) {
cout << “该学号不合法,请重新输入!\n”;
}
else {
break;
}
}
student->number = number;
cout << “请输入学生姓名:”;
cin >> student->name;

    cout << "请输入学生班级:";
    cin >> student->className;

    cout << "请输入学生性别:(0:女生;1:男生)";
    cin >> student->gerder;

    while (true) {
        cout << "请输入学生手机号码:";
        cin >> student->phoneNumber;
        if (!isPhoneOfStudent(student->phoneNumber)) {
            cout << "该号码不合法,请重新输入!\n";
        }
        else {
            break;
        }
    }


    //创建学生的时候,添加选课!
    string ch;
    bool isadd = true;
    cout << "是否为该学生添加课程:(y/n)(默认默认情况下为:y)";
    cin >> ch;
    if (ch == "n") {
        isadd = false;

    }
    else{
        printCourseAll(courseList);
    }

    while (isadd) {
        addCourse(student, nodeAndCourseList, courseList);
        cout << "是否继续为该学生添加课程:(y/n)";
        cin >> ch;
        if (ch == "y") {
        }
        else if (ch == "n") {
            cout << "已经停止添加课表!\n";
            break;
        }
        else {
            cout << "请按照指令操作!\n";
        }
    }

    cout << "请问是否继续进行学生信息登记:(1:是  ,0:否)";
    student->next = p->next;
    p->next = student;
    cin >> isconduct;

    if (isconduct == 1) {
        cout << "继续进行登记!" << endl;
    }
    else if (isconduct == 0) {
        cout << "登记结束!\n\n" << endl;
        break;
    }
    else {
        cout << "错误输入!";
    }

}

}

// 查找显示学生信息 , 根据学生姓名
void queryItem(node *list) {
system(“cls”);
cout << “\t\t\t搜索学生!\n\n\n”;
cout << “请输入你所要查找学生的学号”;
string number;
cin >> number;
node *p;
p = list->next;
while (p != NULL) {
if (number == p->number) {
cout << “学 号:” << p->number << “\n”;
cout << “姓 名:” << p->name << “\n”;
cout << “班 级:” << p->className << “\n”;
cout << “性 别:” << p->gerder << “\n”;
cout << “手机号码:” << p->phoneNumber << “\n\n”;
return;
}
p = p->next;
}
cout << “没有找到相应的学生!\n”;

}

//删除辅助文件内容

void deleteContact(node *student, nodeAndCourse *nodeAndCourseList) {
nodeAndCourse *p, *q;
p = nodeAndCourseList->next;
q = nodeAndCourseList;
while (p != NULL) {
if (p->numberOfStudentId == student->number) {
q->next = p->next;
p = q->next;
}
else {
p = p->next;
q = q->next;
}
}
}

void printAllSimple(node *list) {

node *p;
p = list->next;

if (p == NULL) {
    return;
}
cout << " ┏━━━━━━━━━━━━━━━━━━━━━━┓\n";
cout << "            学号        ┃        姓名          \n\n";
while (p != NULL) {
    cout << " \t   " << p->number << "\t┃         " << p->name << "      \n";
    p = p->next;
}
cout << " ┗━━━━━━━━━━━━━━━━━━━━━━┛\n";

}

// 删除学生信息
void deleteItem(node *list, nodeAndCourse *nodeAndCourseList) {
system(“cls”);
cout << “\t\t 删除学生信息\n\n”;

printAllSimple(list);


cout << "请输入你所要删除学生的学号:";
string number;
cin >> number;
node *p;
p = list->next;
node *q = list;
while (p != NULL) {
    if (number == p->number) {
        cout << "学    号:" << p->number << "\n";
        cout << "姓    名:" << p->name << "\n";
        cout << "班    级:" << p->className << "\n";
        cout << "性    别:" ;
        if (p->gerder == '0') {
            cout << "女\n";
        }
        else {
            cout << "男\n";
        }



        cout << "手机号码:" << p->phoneNumber << "\n\n\n\n";
        break;
    }
    p = p->next;
    q = q->next;
}
if (p == NULL) {
    cout << "没有找到学号为:" << number << " 的学生!\n\n";
    return;
}
char i;
while (true) {
    cout << "是否确认删除:(y/n)";
    cin >> i;
    if (i == 'y') {
        deleteContact(p, nodeAndCourseList);
        q->next = p->next;
        delete(p);
        cout << "删除成功\n\n";
        return;
    }
    else if (i == 'n') {
        cout << "已经取消删除!\n";
        break;
    }
    else {
        cout << "请输入正确的指令!\n";
    }
}

cout << "没有找到相应的学生!\n";

}

//显示所有学生信息
void printAll(node *list, nodeAndCourse *nodeAndCourseList, course *courseList) {
system(“cls”);
int count = 0;

node *p;
p = list->next;

nodeAndCourse *contact;
contact = nodeAndCourseList->next;

course *courseIten;
courseIten = courseList->next;



while (p != NULL) {
    cout << "学生" << ++count << "\n\n";
    cout << "学    号:" << p->number << "\n";
    cout << "姓    名:" << p->name << "\n";
    cout << "班    级:" << p->className << "\n";
    cout << "性    别:" << p->gerder << "\n";
    cout << "手机号码:" << p->phoneNumber << "\n";
    contact = nodeAndCourseList->next;
    while (contact != NULL) {

        if (contact->numberOfStudentId == p->number) {

            courseIten = courseList->next;
            while (courseIten != NULL) {
                if (courseIten->number == contact->numberOfCourseId) {
                    cout << "课程:   " << courseIten->number << "\t";
                    cout << courseIten->name << "\t";
                    cout << courseIten->time << "\n";

                }
                courseIten = courseIten->next;
            }

        }
        contact = contact->next;
    }


    p = p->next;
    cout << "\n\n";
}
string a;
cout << "输入任意字符,返回首页!:";
cin >> a;

}

//修改学生信息
void upDataToStudent(node *student, node *list) {
char i;
string number;
while (true) {
cout << “是否要对该学生进行信息修改:(y/n)”;
cin >> i;
if (i == ‘y’) {
student->number = “”;
while (true) {
cout << “请输入学生学号:”;
cin >> number;
if (isExistenceOfnumber(number, list)) {
cout << “该学号已经存在,请重新输入!\n”;
}
else if (!isnumberOfStudent(number)) {
cout << “学号不合法,请重新输入!\n”;
}
else {
break;
}
}

        student->number = number;

        cout << "请输入学生姓名:";
        cin >> student->name;

        cout << "请输入学生班级:";
        cin >> student->className;

        cout << "请输入学生性别:(0:女生;1:男生)";
        cin >> student->gerder;

        while (true) {
            cout << "请输入学生手机号码:";
            cin >> student->phoneNumber;
            if (!isPhoneOfStudent(student->phoneNumber)) {
                cout << "该号码不合法,请重新输入!\n";
            }
            else {
                break;
            }
        }

        cout << "修改完成\n\n";
        break;
    }
    else if (i == 'n') {
        cout << "取消操作!\n";

        break;
    }
    else {
        cout << "请输入正确的指令!\n";
    }
}

}

//删除学生的课程信息
void DeleteCourseOfStudent(node *student, nodeAndCourse *nodeAndCourseList) {

string number;
cout << "请输入你所要删除的课程编号:";
cin >> number;
nodeAndCourse *p, *q;
p = nodeAndCourseList->next;
q = nodeAndCourseList;
int i = 0;
while (p != NULL) {
    if (number == p->numberOfCourseId && p->numberOfStudentId == student->number) {
        q->next = p->next;
        p->next = NULL;
        delete(p);
        cout << "删除操作成功!\n\n";
        return;
    }
    p = p->next;
    q = q->next;
}
cout << "没有找到对应的课程!\n\n";

}

// 修改学生信息
void upData(node *list, nodeAndCourse *nodeAndCourseList, course *courseList) {
system(“cls”);
cout << “\t\t\t修改学生信息!\n\n”;
printAllSimple(list);
cout << “请输入你对应学生的学号”;
string number;
cin >> number;

node *p;
p = list->next;

nodeAndCourse *contact;
contact = nodeAndCourseList->next;

course *courseIten;
courseIten = courseList->next;

while (p != NULL) {
    if (number == p->number) {
        cout << "\n\n学    号:" << p->number << "\n";
        cout << "姓    名:" << p->name << "\n";
        cout << "班    级:" << p->className << "\n";
        cout << "性    别:" << p->gerder << "\n";
        cout << "手机号码:" << p->phoneNumber << "\n";

        contact = nodeAndCourseList->next;
        while (contact != NULL) {

            if (contact->numberOfStudentId == p->number) {

                courseIten = courseList->next;
                while (courseIten != NULL) {
                    if (courseIten->number == contact->numberOfCourseId) {
                        cout << "课程:   " << courseIten->number << "\t";
                        cout << courseIten->name << "\t";
                        cout << courseIten->time << "\n";

                    }
                    courseIten = courseIten->next;
                }

            }
            contact = contact->next;
        }
        break;
    }
    p = p->next;
}
if (p == NULL) {
    cout << "没有找到相应的学生!\n";
    return;
}

int instructions;

while (true) {
    cout << "\n1.修改学生个人信息;\t";
    cout << "2.删除学生课程信息;\n";
    cout << "3.添加学生课表信息;\t";
    cout << "0.返回首页;\n";
    cout << "\n请输入对应的指令:";
    cin >> instructions;
    switch (instructions) {
    case 1:
        upDataToStudent(p, list);
        break;
    case 2:
        DeleteCourseOfStudent(p, nodeAndCourseList);
        break;
    case 3:
        printCourseAll(courseList);
        addCourse(p, nodeAndCourseList, courseList);
        break;
    case 0:
        return;
    default:
        cout << "请按照指令输入!\n";

    }



}

}

//学生排序,根据学号
void sortBynumber(node *list) {
node *p, *q, *min;
p = list->next;
string exchange;
char gerder;
while (p != NULL) {
q = p->next;
min = p;
while (q != NULL) {
if (min->number.compare(q->number) > 0) {
min = q;
}
q = q->next;
}
if (min != p) {
exchange = min->name;
min->name = p->name;
p->name = exchange;

        exchange = min->number;
        min->number = p->number;
        p->number = exchange;

        gerder = min->gerder;
        min->gerder = p->gerder;
        p->gerder = gerder;

        exchange = min->className;
        min->className = p->className;
        p->className = exchange;

        exchange = min->phoneNumber;
        min->phoneNumber = p->phoneNumber;
        p->phoneNumber = exchange;

    }
    p = p->next;
}

}

//根据学生的姓名,对学生进行排序
void sortByName(node *list) {
node *p, *q, *min;
p = list->next;
string exchange;
char gerder;
while (p != NULL) {
q = p->next;
min = p;
while (q != NULL) {
if (min->name.compare(q->name) > 0) {
min = q;
}
q = q->next;
}
if (min != p) {
exchange = min->name;
min->name = p->name;
p->name = exchange;

        exchange = min->number;
        min->number = p->number;
        p->number = exchange;

        gerder = min->gerder;
        min->gerder = p->gerder;
        p->gerder = gerder;

        exchange = min->className;
        min->className = p->className;
        p->className = exchange;

        exchange = min->phoneNumber;
        min->phoneNumber = p->phoneNumber;
        p->phoneNumber = exchange;

    }
    p = p->next;
}

}

void sort(node *list) {
system(“cls”);
cout << “\t\t数据排序\n\n”;
int i;
while (true) {
cout << “1.根据学号排序\t”;
cout << “2.根据姓名排序\n”;
cout << “其他,退出排序,返回首页\n”;
cout << “请按照提示,输入相应的指令:”;
cin >> i;
switch (i) {
case 1:
sortBynumber(list);
cout << “排序完成,返回首页\n”;
return;
case 2:
sortByName(list);
cout << “排序完成,返回首页\n”;
break;
default:
return;
}
}

}

//存储学生到本地文件
void savetolocal(node *list) {

ofstream outfile;


outfile.open("student.txt");
node *p;
p = list->next;
while (p != NULL) {
    outfile << p->number << " ";
    outfile << p->name << " ";
    outfile << p->className << " ";
    outfile << p->gerder << " ";
    outfile << p->phoneNumber << "\n";
    p = p->next;
}
outfile.close();

}
//从本地文件读取学生信息
void readFromlacal(node *list) {

fstream fin("student.txt");
if (fin)
{
    node *p;
    p = list;
    node *q;
    int rowNum = 0;
    string number, name, classNUmber, phoneNumber;
    char gerder;
    while (fin >> number >> name >> classNUmber >> gerder >> phoneNumber)
    {
        q = new node;
        q->name = name;
        q->number = number;
        q->gerder = gerder;
        q->phoneNumber = phoneNumber;
        q->className = classNUmber;
        q->next = p->next;
        p->next = q;

    }
    fin.close();
}
else
{
    cerr << "打开文件失败!" << endl;
}

}

//从本地读取课程信息;
void readCourseFromlacal(course *courseList) {

fstream fin("course.txt");
if (fin)
{
    course *p;
    int i;
    p = courseList;
    course *q;
    string number, name, time;
    while (fin >> number >> name >> time)
    {
        q = new course;
        q->number = number;
        q->name = name;
        q->time = time;
        q->next = p->next;
        p->next = q;

    }
    fin.close();
}
else
{
    cerr << "打开文件失败!" << endl;
}

}

//保存辅助文件
void savecontacttolocal(nodeAndCourse *nodeAndCourseList) {
ofstream outfile;
outfile.open(“nodeAndCourse.txt”);
nodeAndCourse *p;
p = nodeAndCourseList->next;
while (p != NULL) {
outfile << p->numberOfStudentId << ” “;
outfile << p->numberOfCourseId << “\n”;
p = p->next;
}
outfile.close();
}

//读取辅助文件
void readContactfromlocal(nodeAndCourse *nodeAndCourseList) {

fstream fin("nodeAndCourse.txt");
if (fin)
{
    nodeAndCourse *p;
    int i;
    p = nodeAndCourseList;
    nodeAndCourse *q;
    string numberOfStudentId, numberOfCourseId;
    while (fin >> numberOfStudentId >> numberOfCourseId)
    {
        q = new nodeAndCourse;
        q->numberOfCourseId = numberOfCourseId;
        q->numberOfStudentId = numberOfStudentId;
        q->next = p->next;
        p->next = q;

    }
    fin.close();
}
else
{
    cerr << "打开文件失败!" << endl;
}

}

//打印所有辅助文件的内容
void printContactAll(nodeAndCourse *nodeAndCourseList) {
nodeAndCourse *too;
too = nodeAndCourseList->next;
while (too != NULL) {
cout << “课程号:” << too->numberOfCourseId << “\t”;
cout << “学 号:” << too->numberOfStudentId << “\n”;
too = too->next;
}
}

int getInt(string number) {
int num = 1;
int sum = 0;
int i;
for (i = number.size()-1; i >= 0; i++) {
if (number.at(i) < ‘0’ || number.at(i) > ‘9’) {
return 100;
}
sum +=(int)(number.at(i) - ‘0’)*num;
num *= 10;
}
return sum;
}

void main() {
node *list = new node;
list->next = NULL;

course *courseList = new course;
courseList->next = NULL;
readCourseFromlacal(courseList);//初始化课程;


nodeAndCourse *nodeAndCourseList = new nodeAndCourse;
nodeAndCourseList->next = NULL;

int instruction;
string number;
while (true) {
    cout << " ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n";
    cout << " ┃---------- ★★★★★         ★★★★★★★        ★★★★★ ---------- ┃\n";
    cout << " ┃     ---------------      欢迎使用学生信息管理系统    ---------------     ┃\n";
    cout << " ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫\n";
    cout << " ┃     1.添加学生信息                              2.删除学生信息           ┃\n";
    cout << " ┃     3.修改学生信息                              4.为信息排序             ┃\n";
    cout << " ┃     5.显示所有学生                              6.搜索学生               ┃\n";
    cout << " ┃     7.导入学生信息                              8.保存学生信息           ┃\n";
    cout << " ┃     0.退出系统                                                           ┃\n";
    cout << " ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";
    cout << "\n请输入操作指令:";
    cin >> instruction;
    //cin >> number;
    //instruction = getInt(number);
    switch (instruction) {
    case 1:
        insert(list, nodeAndCourseList, courseList);
        break;
    case 2:
        deleteItem(list, nodeAndCourseList);
        break;
    case 3:
        upData(list, nodeAndCourseList, courseList);
        break;

    case 4:
        sort(list);
        break;
    case 5:
        printAll(list, nodeAndCourseList, courseList);
        break;
    case 6:
        queryItem(list);
        break;
    case 7:
        readFromlacal(list);
        readContactfromlocal(nodeAndCourseList);
        break;
    case 8:
        savetolocal(list);
        savecontacttolocal(nodeAndCourseList);
        break;
    default:
        cout << "请按照指令提示,正确输入!\n\n";
    }

    if (instruction == 0) {
        break;
    }

}

}

本文内如属于原创作品,如有转载,请指明出处!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值