学生基本信息管理程序

纪念迄今为止我为一个程序写过的最长的代码。。。
耍人玩的题目,这题目要求就根本就是随便想出来的吧!!!

ps:庄哥出品,必属精品!

main.cpp文件

#include"studentManagement.h"
int main(){
	studentManagement sm;
	int num=sm.ask_for_create();
	while(1){
		num=sm.ask();
		switch(num){
			case 1:sm.recreate();break;
			case 2:sm.add();break;
			case 3:sm.find();break;
			case 4:sm.revise();break;
			case 5:sm.del();break;
			case 6:sm.show();break;
			case 7:sm.open();break;
			case 8:sm.save();break;
			default:sm.sayGoodbye();
		}
//		1创建 2添加 3查询 4修改 5删除 6显示 7文件导入 8文件导出 9退出
	} 
} 

studentManagement.h文件

#include<string>
#include<iostream>
#include<windows.h>
#include<vector>
#include<map>
#include<fstream>
#include"student.h"
using namespace std;

class studentManagement{
	private:
		vector<student> vec;
		map<string,bool> mp;
		void slowSay(string str){
			for(int i=0;i<str.size();i++){
				cout<<str[i];
				Sleep(40);
			} 
			cout<<endl;
		} 
	public:
		studentManagement(){
			SetConsoleTitle("学生信息管理系统");
		}
		int ask(){
			system("cls");
			system("color 0A");
			slowSay("请选择下面的一个项目:");
			slowSay("1.创建");
			slowSay("2.添加");
			slowSay("3.查询");
			slowSay("4.修改");
			slowSay("5.删除");
			slowSay("6.显示");
			slowSay("7.文件导入");
			slowSay("8.文件导出");
			slowSay("9.退出");
			slowSay("请选择:");
			string str;
			getline(cin,str);
			if(str.length()==1&&str[0]>48&&str[0]<58) return (int)(str[0]-48);
			else{
				slowSay("***?\n让你输入1-9之间的数字!\n\n");
				return ask();
			} 
		} 
		int ask_for_create(){
			int num=ask();
			while(num!=1){
				if(num==9) sayGoodbye();
				slowSay("要先选择创建呦!");
				Sleep(100); 
				num=ask();
			}
			slowSay("创建成功"); 
			Sleep(100);
			return num;
		}
		void recreate(){
			slowSay("你已经创建过了");  
		}
		void add(){
			string num,name,sex,age,cls,faculty,speciality;
			slowSay("请输入学号:");
			getline(cin,num);
			if(mp[num]==1){
				slowSay("学号重复,请重新输入");
				add();
				return;
			}		
			slowSay("请输入姓名:");
			getline(cin,name);
			slowSay("请输入性别:");
			getline(cin,sex);
			slowSay("请输入年龄:");
			getline(cin,age);
			slowSay("请输入班级:");
			getline(cin,cls);
			slowSay("请输入学院:");
			getline(cin,faculty);
			slowSay("请输入专业:");
			getline(cin,speciality);
			
			student stu(num,name,sex,age,cls,faculty,speciality);
			mp[num]=1; 
			vec.push_back(stu);
			
			slowSay("添加成功");  	
		}
		
		void find(){
			slowSay("按学号查询输入1,按班级和专业综合查询输入2");
			string str;
			getline(cin,str); 
			if(str.size()==1&&(str[0]==49||str[0]==48)){
				int idx=-1;
				if(str[0]==49){
					slowSay("请输入学号:"); 
					string num;
					getline(cin,num);
					for(int i=0;i<vec.size();i++){
						if(vec[i].num==num){
							idx=i;
							break;
						}
					}
					
				}
				else if(str.size()==1&&str[0]==50){
					string speciality; 
					slowSay("请输入专业:");
					getline(cin,speciality);
					string cls;
					slowSay("请输入班级:");
					getline(cin,cls);
					for(int i=0;i<vec.size();i++){
						if(vec[i].speciality==speciality&&vec[i].cls==cls){
							idx=i;
							break;
						}
					}
					 
				}
				if(idx==-1){
					slowSay("该名学生信息未被添加!"); 
				}
				else{
					slowSay("找到该学生!");
					slowSay("该学生的学号、姓名、性别、年龄、班级、学院、专业分别为:");
					student p=vec[idx];
					cout<<p.num<<' '<<p.name<<' '<<p.sex<<' '<<p.age<<' '<<p.cls<<' '<<p.faculty<<' '<<p.speciality<<endl;
					
					slowSay("输入任意键继续");
					getchar(); 
				}
			}
			else{
				slowSay("请按正确格式输入!");
				find(); 
			}
		} 
		
		void revise(){
			string num,name,sex,age,cls,faculty,speciality;
			slowSay("请输入学号:");
			getline(cin,num);
			if(mp[num]==0){
				slowSay("学号不存在,请重新输入");
				revise();
				return;
			}		
			slowSay("请输入新姓名:");
			getline(cin,name);
			slowSay("请输入新性别:");
			getline(cin,sex);
			slowSay("请输入新年龄:");
			getline(cin,age);
			slowSay("请输入新班级:");
			getline(cin,cls);
			slowSay("请输入新学院:");
			getline(cin,faculty);
			slowSay("请输入新专业:");
			getline(cin,speciality);
			
			int idx=-1;
			for(int i=0;i<vec.size();i++)
				if(vec[i].num==num){
					idx=i;
					break;
				}
			student stu(num,name,sex,age,cls,faculty,speciality);
			vec[idx]=stu;
			
			slowSay("修改成功");  	
		}
		
		void del(){
			slowSay("按学号删除输入1,按姓名删除输入2");
			string str;
			getline(cin,str); 
			if(str.size()==1&&(str[0]==49||str[0]==48)){
				int idx=-1;
				if(str[0]==49){
					slowSay("请输入学号:"); 
					string num;
					getline(cin,str);
					for(int i=0;i<vec.size();i++){
						if(vec[i].num==num){
							idx=i;
							break;
						}
					}
					
				}
				else if(str.size()==1&&str[0]==50){
					string name;
					slowSay("请输入姓名:");
					getline(cin,name);
					for(int i=0;i<vec.size();i++){
						if(vec[i].name==name){
							idx=i;
							break;
						}
					}
				}
				if(idx==-1){
					slowSay("该名学生信息未被添加!"); 
				}
				else{
					mp[vec[idx].num]=0; 
					vec.erase(vec.begin()+idx,vec.begin()+idx+1);
					slowSay("成功删除该学生!");
				}
			}
			else{
				slowSay("请按正确格式输入!");
				find(); 
			}
		}
		
		void show(){
			slowSay("所有学生的学号、姓名、性别、年龄、班级、学院、专业分别为:");
			for(int i=0;i<vec.size();i++){
				student p=vec[i];
				cout<<p.num<<' '<<p.name<<' '<<p.sex<<' '<<p.age<<' '<<p.cls<<' '<<p.faculty<<' '<<p.speciality<<endl;
			}
			slowSay("输入任意键继续");
			getchar(); 
		}
		
		void open(){
			slowSay("请输入导入文件名称");
			string ss;
			getline(cin,ss);
			ifstream is(ss,ios::in);
			if(is!=NULL){ 
				slowSay("正在导入文件......原先导入信息将被删除");
				mp.clear();
				vec.clear();
				int n;
				cin>>n;
				for(int i=0;i<n;i++){
					string num,name,sex,age,cls,faculty,speciality;
					is>>num>>name>>sex>>age>>cls>>faculty>>speciality;
					student stu(num,name,sex,age,cls,faculty,speciality);
					vec[i]=stu;
				}
				slowSay("导入成功!");
				Sleep(100); 
			}
			else{
				slowSay("文件不存在,请重新输入");
				open();
				return;
			} 
		}
		
		void save(){
			slowSay("请输入导出文件名称");
			string ss;
			getline(cin,ss);
			ofstream os(ss,ios::out);
			os<<vec.size()<<endl;
			for(int i=0;i<vec.size();i++){
				student p=vec[i];
				os<<p.num<<' '<<p.name<<' '<<p.sex<<' '<<p.age<<' '<<p.cls<<' '<<p.faculty<<' '<<p.speciality<<endl;
			}
			slowSay("导出成功!");
			Sleep(100); 
		}
		
		void sayGoodbye(){
			slowSay("谢谢使用\n");
			exit(0);
		}
};

student.h文件

#include<string>
using namespace std;
class student{
	public:
		string num,name,sex,age,cls,faculty,speciality;
		student(string num,string name,string sex,string age,string cls,string faculty,string speciality):
			num(num),name(name),sex(sex),age(age),cls(cls),faculty(faculty),speciality(speciality){}
//	学号、姓名、性别、年龄、班级、学院、专业	
};
posted @ 2021-08-18 15:43  zhuangzhongxu  阅读(104)  评论(0)    收藏  举报