《面向对象程序设计》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,能够运用面向对象的原理和方法解决简单的实际问题,逐步培养学生良好的程序设计能力。
二、设计要求通过这次设计,要求在逻辑特性和结构的设计及其实现等方面中加深对课程基本内容的理解。在程序结构与功能上,充分运用面向对象的思想和方法,包括信息封装、继承、多态以及文件的 *** 作。在程序设计方法以及上机 *** 作等基本技能和科学作风方面受到比较系统和严格的训练。
三、设计内容有新生来报到,要逐个录入其信息,如:学生姓名,性别,专业,出生日期,家庭地址,英语入学成绩。要求设计链表类来实现,并统计学生人数。文本界面为:
1. 新增学生信息
2. 删除学生信息
3. 导入学生信息(已经保存于的文件信息)
4. 学生信息搜索(按姓名)
5. 学生信息统计(按专业或性别或年龄---年龄要自动计算)
6. 按英语成绩排序
7. 学生信息保存
8. 退出
******请选择:1
四、课题的总体结构该课设要求我们完成实现学生信息的录入学生姓名,性别,专业,出生日期,家庭地址,英语入学成绩。要求设计链表类来实现,并统计学生人数。实现学生信息录入系统的学生信息数据的创建,增删改查,文件的保存及其读取实现了更多功能在代码中可以清楚看到
1. 核心功能模块与类的设计上图可以看出Student是学生信息的类,并命名为了STU,会作为基类被继承
上图中的类Stu继承的STU类中的信息,并设置了改课设实现相关功能的函数
对其成员有封装效果
核心功能
添加学生信息
查找学生信息
展示学生信息
修改学生信息
删除学生能够信息
保存学生信息
按英语成绩排序
相关函数
void add()
void find()
void show()
void modify()
void delet()
void save()
void chengji()
2. 程序(系统)详细设计
关于类的设计我设计了两个类一个是Student类该类主要是为了实现c++的继承与多态所用第二个类主要是Stu类该类可以实现各个函数的使用及管理学生信息的作用
- 定义add函数主要是创建一个新的节点利用链表的头插法,插入一个新的信息
- 定义find函数是设置一个想要查找的‘姓名’字符来和链表中存在的信息一一进行比较相同就把相关学生信息打印出来。
- 定义show学生信息是吧链表上每个节点的学生信息打印出来再去下一个节点。
- 定义modify函数,给查找的方法类似,不过修改可以要用学号查找到想修改的学生信息节点,再把这个节点中的信息进行修改。
- 定义delet函数,利用某种信息找到想要删除的学成信息,让指向这个学生信息的节点指向要删除学生信息节点所指向的节点,并把删除学生的节点给释放。
- 定义chengji函数主要利用冒泡排序的方法给排序。
- 定义save函数,主要运用文件的保存。
- 定义read函数的目的是为了读取文件里面的信息到程序里
- 定义panchong函数是为了防止学号重复
- menu和menu2函数是菜单展示。
- jindu函数是显示进度条
- caidan函数是学生信息的菜单
- panxing函数是来规定学生的性别只能为男或女
- dayin函数是把学生信息打印出来
- shuliang函数是判断链表中是否有学生
- zhuce函数是注册账号并登入
- guanli函数判断是否有管理员账号
- puttong函数是非管理员进入的选择系统
- guandeng函数是管理员有账号的登录系统
- begin1和begin2函数是显示能执行的程序
- ziuhou函数是显示退出
#include#include #include #include #include using namespace std; typedef class Student //学生信息类 { public: string id; //学生学号 string name; //学生姓名 string sex; //学生性别 string major; //学生专业 string chusheng; //学生出生日期 string dizhi; //学生家庭地址 int achievement; //学生英语成绩 Student* next; }STU; class Stu :private Student { private: STU* head;//设置链表的头文件 public: Stu()//构造函数,给头文件构造空间 { head = new STU; head->next = NULL; } ~Stu() {}//析构函数 void jindu();//显示加载进度条 void caidan();//学生信息菜单 void menu();//管理员所能执行的程序菜单 void add();//添加学生信息 void find();//查找学生信息 void modify();//修改学生信息 void show();//展示学生信息 void delet();//删除学生信息 void chengji();//按英语成绩排序 int panchong(string o);//判断学生学号时候重复 int panxing(string o);//判断学生的性别是否为其他 void read();//读取文件信息 void save();//信息保存到文件 void dayin(STU* o);//打印出学生信息 int shuliang(STU* o);//判断链表中是否有学生 void zhuce();//简单注册登录表 void guanli();//判断是否有管理员账号 void putong();//非管理员进入所执行的程序 void guandeng();//管理员登录系统 void begin1();//管理员登入后所能执行的程序 void begin2();//非管理员登入后所能执行的程序 void menu2();//非管理员所能执行的程序菜单 void zuihou();//退出程序的显示列表 }; void Stu::guanli() { int i = 0; cout << "是否有管理员账号" << endl; cout << "有输入'1',无输入'0'" << endl; cin >> i; while (i < 0 || i>1) { cout << "无效数字,请重新输入:"; cin >> i; } if (i == 0) { cout << "正在进入,请稍等···" << endl; jindu(); system("cls"); zhuce(); begin1(); } else { cout << "正在进入,请稍等···" << endl; jindu(); system("cls"); guandeng(); begin1(); } } void Stu::guandeng() { string zhanghao1 = "yuanjiahao"; string mima1 = "123456"; string zhanghao2; string mima2; cout << "tt-------------------------------------------------" << endl; cout << "tt 学生信息管理系统登录页面 " << endl; cout << "tt-------------------------------------------------" << endl; cout << "tt请输入学生通信录管理系统的账号:"; cin >> zhanghao2; while (1) { if (strcmp(zhanghao1.c_str(), zhanghao2.c_str()) != 0) { cout << "tt没有该账号,请重新输入:"; cin >> zhanghao2; continue; } else break; } cout << "tt请输入学生通信录管理系统的密码:"; cin >> mima2; while (1) { if (strcmp(mima1.c_str(), mima2.c_str()) != 0) { cout << "tt输入错误,请重新输入:"; cin >> mima2; continue; } else { system("cls"); cout << "" << endl; cout << "" << endl; cout << "" << endl; cout << "t t t t t"; cout << "成功登陆"; Sleep(1000); break; } } system("cls"); } void Stu::begin1() { int i = 0; do { menu(); cout << "请输入想执行的程序:"; cin >> i; system("cls"); switch (i) { case 0: cout << "正在退出程序" << endl; jindu(); system("cls"); cout << "退出成功" << endl; break; case 1://1.增加学生信息 add(); cout << "正在退出,请稍等···" << endl; jindu(); system("cls"); break; case 2://2.删除学生信息 delet(); system("pause"); system("cls"); break; case 3://3.查询学生信息 find(); system("cls"); break; case 4://4.学生信息统计 show(); system("pause"); system("cls"); break; case 5://5.按英语成绩排序 chengji(); system("pause"); system("cls"); break; case 6://6.修改学生信息 modify(); system("cls"); break; case 7://7.学生信息保存 save(); system("pause"); system("cls"); break; case 8://8.导入学生信息 read(); cout << "新生信息已导入" << endl; system("pause"); system("cls"); break; default: cout << "输入错误,请重新输入"; break; } } while (i); } void Stu::begin2() { int i = 0; read(); system("cls"); do { menu2(); cout << "请输入想执行的程序:"; cin >> i; system("cls"); switch (i) { case 0: cout << "正在退出程序" << endl; jindu(); system("cls"); cout << "退出成功" << endl; break; case 1: find(); system("cls"); break; case 2: show(); system("pause"); system("cls"); break; case 3: chengji(); cout << "正在退出,请稍等···" << endl; jindu(); system("cls"); break; default: cout << "输入错误,请重新输入"; break; } } while (i); } void Stu::putong() { cout << "检测到你没有账号" << endl; cout << "正在进入注册系统,请稍等···" << endl; jindu(); system("cls"); zhuce(); begin2(); } void Stu::zuihou() { cout << "tt*************************************************" << endl; cout << "tt****** ******" << endl; cout << "tt****** 谢谢使用学生信息管理系统 ******" << endl; cout << "tt****** 欢迎下次使用 ******" << endl; cout << "tt****** ******" << endl; cout << "tt*************************************************" << endl; } void Stu::zhuce() { string zhanghao1; string zhanghao2; string mima1; string mima2; cout << "tt-------------------------------------------------" << endl; cout << "tt 学生信息管理系统注册页面 " << endl; cout << "tt-------------------------------------------------" << endl; cout << "tt注册学生通信录管理系统的账号" << endl; cout << "tt请输入学生通信录管理系统的账号:"; cin >> zhanghao1; cout << "tt请输入学生通信录管理系统的密码:"; cin >> mima1; cout << "tt 正在进入登录页面,请稍等···" << endl; cout << "tt"; jindu(); system("cls"); cout << "tt-------------------------------------------------" << endl; cout << "tt 学生信息管理系统登录页面 " << endl; cout << "tt-------------------------------------------------" << endl; cout << "tt请输入学生通信录管理系统的账号:"; cin >> zhanghao2; while (1) { if (strcmp(zhanghao1.c_str(), zhanghao2.c_str()) != 0) { cout << "tt没有该账号,请重新输入:"; cin >> zhanghao2; continue; } else break; } cout << "tt请输入学生通信录管理系统的密码:"; cin >> mima2; while (1) { if (strcmp(mima1.c_str(), mima2.c_str()) != 0) { cout << "tt输入错误,请重新输入:"; cin >> mima2; continue; } else { system("cls"); cout << "" << endl; cout << "" << endl; cout << "" << endl; cout << "t t t t t"; cout << "成功登陆"; Sleep(1000); break; } } system("cls"); } void Stu::caidan() { cout << "tt***************************************************" << endl; cout << "tt****** 1.学生学号 2.学生名字 ******" << endl; cout << "tt****** 3.学生性别 4.学生专业 ******" << endl; cout << "tt****** 5.学生出生日期 6.学生家庭地址 ******" << endl; cout << "tt****** 7.学生英语成绩 0.退出查询程序 ******" << endl; cout << "tt***************************************************" << endl; cout << "请选择:"; } void Stu::jindu() { int n = 20; int i; cout << "["; for (i = 0; i < n; i++) { cout << ">"; Sleep(100); } cout << "]"< next; while (s) { if (!strcmp(s->id.c_str(), o.c_str())) { return 0; } s = s->next; } return 1; } int Stu::panxing(string o)//判断学生的性别是否为其他 { string i = "男"; string j = "女"; if (!strcmp(o.c_str(), j.c_str())) return 1; else if (!strcmp(o.c_str(), i.c_str())) return 1; else return 0; } int Stu::shuliang(STU* o) { if (o == NULL) return 0; else return 1; } void Stu::add()//添加学生信息 { STU* p; int m = 0; int n = 0; while (1) { p = new STU; cout << "请输入学号:"; while (1) { cin >> p->id; m = panchong(p->id); if (m == 0) { cout << "学号重复,请重新输入:"; continue; } else break; } cout << "请输入姓名:"; cin >> p->name; while (1) { cout << "请输入性别:"; cin >> p->sex; m = panxing(p->sex); if (m == 0) { cout << "请输入'男',或输入'女'" << endl; continue; } else break; } cout << "请输入专业:"; cin >> p->major; cout << "请输入出生日期:"; cin >> p->chusheng; cout << "请输入家庭地址 :"; cin >> p->dizhi; cout << "请输入英语成绩:"; cin >> p->achievement; p->next = head->next; head->next = p; cout << "是否继续添加" << endl; cout << "是请输入'1',否请输入'0'" << endl; cout << "请选择:"; cin >> n; while (n < 0 || n>1) { cout << "输入不规范,请重新输入:"; cin >> n; } if (n == 0) { break; } system("cls"); } } void Stu::dayin(STU* o) { cout << "学号:" << o->id << endl; cout << "姓名:" << o->name << endl; cout << "性别:" << o->sex << endl; cout << "专业:" << o->major << endl; cout << "出生日期:" << o->chusheng << endl; cout << "家庭地址:" << o->dizhi << endl; cout << "英语成绩:" << o->achievement << endl; cout << endl; } void Stu::find()//查找学生信息 { int i = 0; int m = 0; int j = 0; do { int n = 0; STU* p = head->next; string id; //学生学号 string name; //学生姓名 string sex; //学生性别 string major; //学生专业 string chusheng; //学生出生日期 string dizhi; //学生家庭地址 int achievement = 0; //学生英语成绩 j = shuliang(p); if (j == 0) { cout << "系统中没有学生信息" << endl; cout << "请先添加学生信息在查询" << endl; break; } cout << "请选择查询方式" << endl; caidan(); cin >> i; system("cls"); switch (i) { case 0: cout << "正在退出程序" << endl; jindu(); system("cls"); cout << "退出成功" << endl; break; case 1: cout << "请输入查询学生学号:"; cin >> id; cout << "正在查找" << endl; jindu(); while (p) { if (!strcmp(p->id.c_str(), id.c_str())) { dayin(p); break; } else { p = p->next; if (p == NULL) { cout << "查无此人" << endl; break; } } } system("pause"); system("cls"); break; case 2: cout << "请输入查询学生姓名:"; cin >> name; cout << "正在查找" << endl; jindu(); while (p) { if (!strcmp(p->name.c_str(), name.c_str())) { dayin(p); p = p->next; n++; break; } else { p = p->next; if (p == NULL && n == 0) { cout << "查无此人" << endl; break; } if (p == NULL && n != 0) break; } } if (n > 1) cout << "共有" << n << "名学生名字为" << name << endl; system("pause"); system("cls"); break; case 3: cout << "请输入要查询的性别:"; while (1) { cin >> sex; m = panxing(sex); if (m == 0) { cout << "请输入'男',或输入'女'" << endl; cout << "请输入性别" << endl; continue; } else break; } cout << "正在查找" << endl; jindu(); while (p) { if (!strcmp(p->sex.c_str(), sex.c_str())) { dayin(p); p = p->next; n++; break; } else { p = p->next; if (p == NULL && n == 0) { cout << "没有此性别的学生" << endl; break; } if (p == NULL && n != 0) break; } } if (n != 0) cout << sex << "总共有" << n << "名" << endl; system("pause"); system("cls"); break; case 4: cout << "请输入要查询的专业:"; cin >> major; cout << "正在查找" << endl; jindu(); while (p) { if (!strcmp(p->major.c_str(), major.c_str())) { dayin(p); p = p->next; n++; break; } else { p = p->next; if (p == NULL && n == 0) { cout << "没有此专业的学生" << endl; break; } if (p == NULL && n != 0) break; } } if (n != 0) cout << major << "专业共有" << n << "名学生" << endl; system("pause"); system("cls"); break; case 5: cout << "请输入要查询的出生日期:"; cin >> chusheng; cout << "正在查找" << endl; jindu(); while (p) { if (!strcmp(p->chusheng.c_str(), chusheng.c_str())) { dayin(p); p = p->next; n++; break; } else { p = p->next; if (p == NULL && n == 0) { cout << "没有此时出生的学生" << endl; break; } if (p == NULL && n != 0) break; } } if (n != 0) cout << "在" << chusheng << "出生的学生有" << n << "名" << endl; system("pause"); system("cls"); break; case 6: cout << "请输入要查询的家庭地址:"; cin >> dizhi; cout << "正在查找" << endl; jindu(); while (p) { if (!strcmp(p->dizhi.c_str(), dizhi.c_str())) { dayin(p); p = p->next; n++; break; } else { p = p->next; if (p == NULL && n == 0) { cout << "没有家庭地址在此地的学生" << endl; break; } if (p == NULL && n != 0) break; } } if (n != 0) cout << "共有" << n << "名学生家在" << dizhi << endl; system("pause"); system("cls"); break; case 7: cout << "请输入要查询的英语成绩:"; cin >> achievement; cout << "正在查找" << endl; jindu(); while (p) { if (p->achievement == achievement) { dayin(p); p = p->next; n++; break; } else { p = p->next; if (p == NULL && n == 0) { cout << "没有这个成绩的学生" << endl; break; } if (p == NULL && n != 0) break; } } if (n != 0) cout << "共有" << n << "名学生英语成绩为" << achievement << endl; system("pause"); system("cls"); break; default: cout << "输入错误,请重新输入"; break; } } while (i); } void Stu::modify()//修改学生信息 { STU* p = head->next; string id; string hao; int i = 0; int m = 0; cout << "请输入要修改学生的学号:" << endl; cin >> id; cout << "正在搜索,请稍等···"; jindu(); system("cls"); while (p) { if (!strcmp(p->id.c_str(), id.c_str())) { do { dayin(p); cout << "---------------------" << endl; cout << "请输入想要修改的信息" << endl; caidan(); cin >> i; system("cls"); switch (i) { case 0: cout << "正在退出程序" << endl; jindu(); system("cls"); cout << "退出成功" << endl; Sleep(1000); break; case 1: cout << "请输入修改的学号:"; cin >> p->id; cout << "正在修改" << endl; jindu(); system("cls"); cout << "修改成功" << endl; Sleep(1000); system("cls"); break; case 2: cout << "请输入修改后的名字:"; cin >> p->name; cout << "正在修改" << endl; jindu(); system("cls"); cout << "修改成功" << endl; Sleep(1000); system("cls"); break; case 3: cout << "请输入修改后的性别:"; while (1) { cin >> p->sex; m = panxing(p->sex); if (m == 0) { cout << "请输入'男',或输入'女'" << endl; continue; } else break; } cout << "正在修改" << endl; jindu(); system("cls"); cout << "修改成功" << endl; Sleep(1000); system("cls"); break; case 4: cout << "请输入修改后的专业:"; cin >> p->major; cout << "正在修改" << endl; jindu(); system("cls"); cout << "修改成功" << endl; Sleep(1000); system("cls"); break; case 5: cout << "请输入修改后的出生日期:"; cin >> p->chusheng; cout << "正在修改" << endl; jindu(); system("cls"); cout << "修改成功" << endl; Sleep(1000); system("cls"); break; case 6: cout << "请输入修改后的家庭地址:"; cin >> p->dizhi; cout << "正在修改" << endl; jindu(); system("cls"); cout << "修改成功" << endl; Sleep(1000); system("cls"); break; case 7: cout << "请输入修改后的英语成绩:"; cin >> p->achievement; cout << "正在修改" << endl; jindu(); system("cls"); cout << "修改成功" << endl; Sleep(1000); system("cls"); break; default: cout << "输入错误,请重新输入"; break; } } while (i); break; } else { p = p->next; if (p == NULL) { cout << "没有此学生" << endl; break; } } } } void Stu::show()//展示学生信息 { int boy = 0; int girl = 0; int peo = 0; STU* p = head->next; while (p) { string i = "男"; string j = "女"; if (!strcmp(p->sex.c_str(), j.c_str())) girl++; if (!strcmp(p->sex.c_str(), i.c_str())) boy++; peo++; dayin(p); p = p->next; } cout << "学生总共有:" << peo << endl; cout << "男生总共有:" << boy << endl; cout << "女生总共有:" << girl << endl; } void Stu::delet()//删除学生信息 { STU* a = head->next; STU* b = head; string id; int c = 0; cout << "请输入要删除学生的学号:"; cin >> id; while (a) { if (!strcmp(a->id.c_str(), id.c_str())) { cout << "是否确定删除该学生" << endl; cout << "确定输入'1',取消输入'0'" << endl; cout << "请输入:"; cin >> c; if (c == 0) break; b->next = a->next; delete a; cout << "正在删除,请稍等···" << endl; jindu(); system("cls"); cout << "删除成功" << endl; break; } else { a = a->next; b = b->next; if (a == NULL) { cout << "没有此学生" << endl; break; } } } } void Stu::chengji()//按英语成绩排序 { STU* w = head->next; int a[1000] = {}; int i = 0; int j = 0; int n = 0; int sun = 0; for (i = 0; i < 1000; i++) { if (w == NULL) break; a[i] = w->achievement; w = w->next; n++; } for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (a[j] < a[j + 1]) { sun = a[j]; a[j] = a[j + 1]; a[j + 1] = sun; } } } cout << "按英语成绩排名如下" << endl; for (i = 0; i < n; i++) { w = head->next; while (w) { if (a[i] == w->achievement) { dayin(w); w = w->next; } else { w = w->next; if (w == NULL) { break; } } } } } void Stu::save()//信息保存到文件 { ofstream of1;//定义一个写的文件指针 of1.open("D:\vs代码文件\c++大作业\大作业\大作业\caozuo.txt", ios::out);//打开一个文件 if (!of1.is_open()) { cout << "open caozuo.txt error!" << endl; } else { STU* s = head->next; while (s) { of1 << s->id << " " << s->name << " " << s->sex << " " << s->major << " " << s->chusheng << " " << s->dizhi << " " << s->achievement << " " << endl; s = s->next; } of1.close();//关闭文件 } ofstream of2; of1.open("D:\vs代码文件\c++大作业\大作业\学生信息.txt", ios::out); if (!of1.is_open()) { cout << "open guankan.txt error!" << endl; } else { STU* b = head->next; while (b) { of1 << "学号:" << b->id << " " << "姓名:" << b->name << " " << "性别" << b->sex << " " << "专业:" << b->major << " " << "出生日期:" << b->chusheng << " " << "家庭住址" << b->dizhi << "英语成绩:" << b->achievement << " " << endl; b = b->next; } of1.close(); } cout << "正在保存,请稍等···" << endl; jindu(); cout << "保存成功!" << endl; } void Stu::read() { STU* r = head; ifstream infile; string id; //学生学号 string name; //学生姓名 string sex; //学生性别 string major; //学生专业 string chusheng; //学生出生日期 string dizhi; //学生家庭地址 int achievement = 0; infile.open("D:\vs代码文件\c++大作业\大作业\大作业\caozuo.txt", ios::in); if (!infile) { return; } while (infile >> id >> name >> sex >> major >> chusheng >> dizhi >> achievement) { STU* p = new STU; p->id = id; p->name = name; p->sex = sex; p->major = major; p->chusheng = chusheng; p->dizhi = dizhi; p->achievement = achievement; r->next = p; //和前结点连接 p->next = NULL; r = p; } cout << "正在导入,请稍等···" << endl; jindu(); infile.close(); } int main() { Stu S; Stu P; int i = 0; do { cout << "tt*************************************************" << endl; cout << "tt****** ******" << endl; cout << "tt****** 欢迎使用学生信息管理系统 ******" << endl; cout << "tt****** ******" << endl; cout << "tt*************************************************" << endl; cout << "请选择登陆方式" << endl; cout << "tt*************************************************" << endl; cout << "tt****** 1.学生登录 2.管理员登录 ******" << endl; cout << "tt****** 0.退出学生信息管理系统 ******" << endl; cout << "tt*************************************************" << endl; cout << "请输入:"; cin >> i; system("cls"); switch (i) { case 0: cout << "正在退出程序" << endl; P.jindu(); system("cls"); cout << "退出成功" << endl; S.zuihou(); break; case 1: cout << "正在进入,请稍等···" << endl; P.jindu(); system("cls"); S.putong(); Sleep(1000); system("cls"); break; case 2: cout << "正在进入,请稍等···" << endl; P.jindu(); system("cls"); S.guanli(); Sleep(1000); system("cls"); break; default: cout << "输入错误,请重新输入"; break; } } while (i); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)