自己写的一点小玩意,共享一下源码,希望能帮助大家!如有不足望大家见谅!
#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;
}
}
}
本文内如属于原创作品,如有转载,请指明出处!