欢迎使用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; }}
}
本文内如属于原创作品,如有转载,请指明出处!
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 根据两点的经纬度求方位角和距离,等
- JVM:垃圾回收机制和调优手段
- LeetCode *** 330. Patching Array
- 干货:PHP代码20个实用技巧
- MFC获取时间的几种方法
- 欢迎使用CSDN-markdown编辑器
- Cookie与Session的介绍与区别
- System.Reflection.ConstructorInfo
- 将Eclipse代码导入到AndroidStudio的两种方式
- 差分约束系统详解
- GCC参数详解
- 如何制作交叉报表-多层交叉
- 淘宝应对"双11"的技术架构分析
- 编码的问题