欢迎使用CSDN-markdown编辑器

来源:互联网 发布:数组长度最多开多大 编辑:程序博客网 时间:2024/05/29 19:23

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

这里写图片描述

#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;    }}

}

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

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 移动宽带网络不稳定怎么办 股票帐号被锁定怎么办 电脑帐号锁定了怎么办 云校家帐号被锁定怎么办 qq音乐停止运行怎么办 做事效率低怎么办教案 孩子做事效率低怎么办 百度搜不到答案怎么办 学乐云账号忘了怎么办 wps云空间不足怎么办 超星密码忘了怎么办 百度钱包忘记密码怎么办 宝宝吃了粉笔怎么办 粉笔灰进眼睛怎么办 讲公开课紧张怎么办 课堂派考勤旷课怎么办 2018qq音乐付费怎么办 不满一个月社保怎么办 试用期未买社保怎么办 小视频转发黑屏怎么办 听歌要钱的怎么办 手机歌曲要付费怎么办 安装包已损坏怎么办 方舟 安装包损坏怎么办 安装包已删除怎么办 超大附件过期了怎么办 邮箱被黑客盯上怎么办 云闪付安全问题忘记了怎么办 不知道网易账号怎么办 登录过程初始化失败怎么办 登录进程初始化失败怎么办 网易邮箱地址忘了怎么办 电脑电源短路了怎么办 电脑电源有问题怎么办 手机账号忘了怎么办 简历周五发了怎么办 网易邮箱被注销怎么办 foxmail接收密码忘记怎么办 招才猫企业邮箱认证没有怎么办 管理员账号被删除怎么办 我想办个信用卡怎么办