c++程序设计之宿舍管理系统(简单版)

程序课程设计报告

设计要求:设计一个系统能够满足对数据的增删改查操作,所以用数据库实现对数据的增删改查,有学生的姓名,性别,宿舍等相关信息。
实验所用软件:devC++,mysql数据库,SQLyog

注意:用devC++连接数据库需要下载安装一个软件,就是驱动它能够连接到本地电脑的数据库,如果不会,可以去百度一下怎么连接数据库,但是在这之前,你也要安装好数据库,如果数据库能够连接成功了,那么就可以开始写数据库建表,写代码了。

简介:我是大二上期完成的一个这么一个系统,做学校的程序设计报告的,实现的功能就是登录验证,还有对学生信息的增删改查,写的非常的简单,但是能够把这些基本的功能实现,大概有500行代码左右。

数据库我建了三张表,分别是student,token,user,他们建在一个库里面,数据就自己添加。
各自表的字段为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

c++源代码:

#include <iostream>
#include<windows.h>
#include <mysql.h>
#include<string>
#include <conio.h>
using namespace std;
MYSQL* conn;
MYSQL_RES* res;
string query;
//初始化mysql 	
MYSQL_ROW row;  

//学生类 
class student
{
private:
	string sno;            //学号 
    string name;        //姓名 
    bool sex;        //性别 
    int age;            //年龄 
    string major;     //专业 
    int building;        //楼号
    int dormitary;    //宿舍号
public:
	student()
	{
		
	}
	student(string sno,string name,bool sex,int age,string major,int build,int dor){
		this->sno=sno;
		this->name=name;
		this->sex=sex;
		this->age=age;
		this->major=major;
		this->building=build;
		this->dormitary=dor;
	}
	~student()
	{
//		cout<<"析构函数"<<endl; 
	}
	//设置学号 
	void setsno(string sno)
	{
		while(true){
		if(sno.length()==4)
		{
			this->sno=sno;
			break;
		}
		else
		{
			cout<<"学号是一个四位的数字,你的输入有误"<<endl;
			cout<<"请再次输入学号:";
			cin>>sno; 
		}
	}
	}
	//设置姓名 
	void setname(string name)
	{
		this->name=name;
	} 
	//设置性别
	void setsex(bool sex)
	{
		this->sex=sex;
	} 
	//设置年龄
	void setage(int age)
	{
		while(true)
		{
		if(age<17||age>27)
		{
			cout<<"输入年龄有误,与实际情况不符"<<endl;
			cout<<"请再次输入年龄:";
			cin>>age; 
			break;
		}
		else{
			this->age=age;
			break;
		}}
	 } 
	 //设置专业
	 void setmajor(string major)
	 {
	 	this->major=major;
	 } 
	 //设置楼号
	void setbuilding(int bulid)
	{
		while(true)
		{
		if(bulid==18||bulid==19)
		{
			this->building=bulid;
			break;
		}
		else{
			cout<<"输入楼号有误,目前只有18.19栋楼"<<endl;
			cout<<"请再次输入楼号:";
			cin>>building; 
			break;
		}}
		
	} 
	//设置宿舍号
	void setdormitary(int dor)
	{
		while(true){
		if(100<=dor<=999)
		{
			this->dormitary=dor;
			break;
		}
		else
		{
			cout<<"宿舍号是一个三位的数字,你的输入有误"<<endl;
			cout<<"请再次输入宿舍号:";
			cin>>dor; 
		}
	}
	} 
	string getsno()
	{
		return sno;
	}
	string getname()
	{
		return name;
	}
	bool getsex()
	{
		return sex;
	}
	int getage()
	{
		return age;
	}
	string getmajor()
	{
		return major;
	}
	int getbuilding()
	{
		return building;
	}
	int getdormitary()
	{
		return dormitary;
	}
};
student createobjects()
{
	string sno;            //学号 
    string name;        //姓名 
    bool sex;        //性别 
    int age;            //年龄 
    string major;     //专业 
    int building;        //楼号
    int dormitary;    //宿舍号
	student stu("0003","张四","男",21,"计算机科学与技术",19,204);
	cout<<"请输入学生的学号(形如****):";
	cin>> sno;
	stu.setsno(sno);
//	cout<<stu.getsno()<<endl;
	cout<<"请输入学生的姓名:";
	cin>> name;
	stu.setname(name);
	cout<<"*****************************"<<endl;
	cout<<"*\t0.男"<<"   "<<"1.女"<<endl;
	cout<<"*****************************"<<endl;
	cout<<"请输入学生的姓别:";
	cin>> sex;
	stu.setsex(sex);
	cout<<"请输入学生的年龄:";
	cin>> age;
	stu.setage(age);
	cout<<"*****************************"<<endl;
	cout<<"*\t1.计算机科学与技术"<<endl;
	cout<<"*\t2.软件工程"<<endl;
	cout<<"*\t3.物联网工程"<<endl;
	cout<<"*\t4.大数据管理"<<endl;
	cout<<"*\t5.区块链"<<endl; 
	cout<<"*\t6.人工智能"<<endl;
	cout<<"*****************************"<<endl; 
	cout<<"请输入学生的专业:";
	cin>> major;
	stu.setmajor(major);
	cout<<"*****************************"<<endl;
	cout<<"*\t18栋"<<"   "<<"19栋"<<endl;
	cout<<"*****************************"<<endl;
	cout<<"请输入学生的楼号:";
	cin>> building;
	stu.setbuilding(building);
	cout<<"请输入学生的宿舍号形如(***):";
	cin>> dormitary;
	stu.setdormitary(dormitary);
	return stu;
}
bool ConnectDatabase(){
	//初始化mysql 	
    MYSQL_ROW row;
    
    conn = mysql_init(NULL);
    if (!mysql_real_connect(conn, "localhost", "root", "数据库密码", "数据库", 3306, NULL, 0)) { 
		cout<<"数据库连接失败"<<endl; 
		printf("原因:%s\n", mysql_error(conn));
		return false;
	} else {
		cout<<"***\t数据库连接上了哟\t***"<<endl;
		return true;
	}  	
//    mysql_free_result(res);  //释放一个结果集合使用的内存。
//	mysql_close(conn);	 //关闭一个服务器连接。
}
//查询数据
bool QueryDatabase1()
{
	query = "SELECT * FROM student";
	mysql_query(conn, "set names GBK");
    mysql_query(conn, query.c_str());
    res = mysql_store_result(conn);//获取结果集  
//	cout<<"ssss"<<mysql_num_fields(res)<<endl;
//	cout<<"ssss"<<mysql_num_rows(res)<<endl; //返回一个结果集合中的行的数量。
	int col = mysql_num_fields(res);
	cout<<"****************************************************************************"<<endl;
	cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"性别"<<"\t"<<"年龄"<<"\t"<<"专业"<<"\t\t"<<"楼号"<<"\t"<<"宿舍号"<<endl ;
	cout<<"****************************************************************************"<<endl;
    while ((row = mysql_fetch_row(res)) != NULL)
    {
        for(int i=0;i<col;i++)
    	{ 
    		cout<< row[i]<<"\t";
		}
		cout<<endl;
    } 
} 
//查询部分数据的菜单
string showdatamenu()
{
	int choice;
	string num;
	string query;
	cout<<"\t***********************************"<<endl;
	cout<<"\t下面是可选择的条件查询"<<endl;	
	cout<<endl;
	cout<<"\t*1.根据楼号查询学生信息"<<endl;
	cout<<"\t*2.根据宿舍号查询学生信息"<<endl;
	cout<<"\t*3.根据性别查询的学生信息"<<endl;
	cout<<"\t*4.根据专业查询学生信息"<<endl;
	cout<<"\t*5.根据姓名查询学生信息"<<endl;
	cout<<"\t*6.根据学号查询学生信息"<<endl;
	cout<<"\t*其他键退出系统界面!"<<endl;
	cout<<"\t***********************************"<<endl;
	cout<<"\t请输入你的选项:";
	cin>>choice;
	switch(choice) {
	case 1:
		cout<<"\t*请输入你要查那栋楼:";
		cin>>num;	
	query="SELECT * FROM student where sbuilding="+num;break;
	case 2:
		cout<<"\t*请输入你要查询哪个宿舍:";
		cin>>num;
	query="SELECT * FROM student where sdormitary="+num;break;
	case 3:
		cout<<"\t*请输入你要查询哪个性别:";
		cin>>num;
	query="SELECT * FROM student where sex='"+num+"'";break;
	case 4:
		cout<<"\t*请输入你要查询哪个专业:";
		cin>>num;
	query="SELECT * FROM student where smajor='"+num+"'";break;
	case 5:
		cout<<"\t*请输入你要查询学生姓名:";
		cin>>num;
	query="SELECT * FROM student where sname='"+num+"'";break;
	case 6:
		cout<<"\t*请输入你要查询学生的学号:";
		cin>>num;
	query="SELECT * FROM student where sno='"+num+"'";break;
	default:
		cout<<"退出这个界面了"<<endl; 
		break;
	return query;
}
} 
//查询部分数据
bool QueryDatabase2()
{
	string query = showdatamenu();
	cout<<query<<endl;
//	query = "SELECT "+Where+ " FROM student";
	mysql_query(conn, "set names GBK");
    mysql_query(conn, query.c_str());
    res = mysql_store_result(conn);//获取结果集  
//	cout<<"ssss"<<mysql_num_fields(res)<<endl;
//	cout<<"ssss"<<mysql_num_rows(res)<<endl; //返回一个结果集合中的行的数量。
	int col = mysql_num_fields(res);
	cout<<"****************************************************************************"<<endl;
	cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"性别"<<"\t"<<"年龄"<<"\t"<<"专业"<<"\t\t"<<"楼号"<<"\t"<<"宿舍号"<<endl ;
	cout<<"****************************************************************************"<<endl;
    while ((row = mysql_fetch_row(res)) != NULL)
    {
        for(int i=0;i<col;i++)
    	{ 
    		cout<< row[i]<<"\t";
		}
		cout<<endl;
    } 
}

//插入数据  
bool InsertData()
{
//	mysql_query(conn,"insert into teacher values ('115','张三','男',21,'cs')");

	string sex,major;
	student stu = createobjects();
	if(stu.getsex())
	{
		sex="女"; 
	}
	else{
		sex="男";
	}
	if(stu.getmajor()=="1"||stu.getmajor()=="计算机科学与技术")
	{
		major="计科技术";
	}
	else if(stu.getmajor()=="2"||stu.getmajor()=="软件工程")
	{
		major="软件工程";
	}
	else if(stu.getmajor()=="3"||stu.getmajor()=="物联网工程")
	{
		major="物联网工程";
	}
	else if(stu.getmajor()=="4"||stu.getmajor()=="大数据管理")
	{
		major="大数据管理";
	}
	else if(stu.getmajor()=="5"||stu.getmajor()=="区块链")
	{
		major="区块链技术";
	}
	else if(stu.getmajor()=="6"||stu.getmajor()=="人工智能")
	{
		major="人工智能";
	}
	string insertdata = "insert into student values ('"+stu.getsno()+"','"+stu.getname()+"','"+sex+"','"+to_string(stu.getage())+"','"+major+"','"+to_string(stu.getbuilding())+"','"+to_string(stu.getdormitary())+"')";
	cout<<insertdata<<endl;
	mysql_query(conn, "set names GBK");
	if (mysql_query(conn,insertdata.c_str()))        //执行SQL语句  
	{
		printf("Insert failed (%s)\n", mysql_error(conn));
		return false;
	}
	else
	{
		printf("Insert success\n");
		return true;
	}
}
//修改学生信息
bool changedata()
{
	int building,choice,dor;
	string query,sno,major;
	cout<<"\t请输入你要修改学生信息的学号:";
	cin>>sno;
	query = "select * from student where sno='"+sno+"'";
	mysql_query(conn, "set names GBK");
    mysql_query(conn, query.c_str());
    res = mysql_store_result(conn);//获取结果集  
	int col = mysql_num_fields(res);
	cout<<"****************************************************************************"<<endl;
	cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"性别"<<"\t"<<"年龄"<<"\t"<<"专业"<<"\t\t"<<"楼号"<<"\t"<<"宿舍号"<<endl ;
	cout<<"****************************************************************************"<<endl;
    while ((row = mysql_fetch_row(res)) != NULL)
    {
        for(int i=0;i<col;i++)
    	{ 
    		cout<< row[i]<<"\t";
		}
		cout<<endl;
    } 
	cout<<"\t修改信息菜单栏"<<endl;
	cout<<"\t*1.宿舍号     2.楼号      3.专业 "<<endl;
	cout<<"\t请输入你的选择:";
	cin>>choice;
	student stu;
	if(choice==1)
	{
		cout<<"请输入你要修改的新宿舍号:";
		cin>>dor;
		stu.setdormitary(dor);
		dor = stu.getdormitary();
		query="update student set sdormitary="+to_string(dor)+" where sno='"+sno+"'";
	}
	else if(choice==2)
	{
		cout<<"请输入你要修改的新楼号:";
		cin>>dor;
		stu.setbuilding(dor);
		dor = stu.getbuilding();
		query="update student set sbuilding= "+to_string(dor)+" where sno='"+sno+"'";
	}
	else if(choice==3)
	{
		cout<<"****************************************"<<endl;
		cout<<"\t1.计科技术        2.软件工程"<<endl;
		cout<<"\t3.物联网工程      4.大数据管理"<<endl;
		cout<<"\t5.区块链技术      6.人工智能"<<endl; 
		cout<<"****************************************"<<endl;
		cout<<"\t请输入你要修改的专业:";
		cin>>major;
		query="update student set sdormitary='"+major+"' where sno='"+sno+"'";
	}
	cout<<query<<endl;
	mysql_query(conn, "set names GBK");
	if (mysql_query(conn,query.c_str()))        //执行SQL语句  
	{
		printf("change failed (%s)\n", mysql_error(conn));
		return false;
	}
	else
	{
		printf("change success\n");
		return true;
	}
} 
//隐藏密码处理 
string PasswordSecret() {
    int index = 0,maxlen=20;
    char pswd[20];
    char buff = '\0';
    while ((buff = getch()) != '\r') {
        if (buff == '\b' && index != 0) {
            index--;
            printf("\b \b");
        } else if (index < maxlen - 1 && buff != '\b') {
            pswd[index++] = buff;
            putchar('*');
        }
    }
    pswd[index] = '\0';
    return pswd;
}
//删除学生信息 
bool DeleteData()
{
	string name,queryuser;
	cout<<"\t**********************************************"<<endl;
	cout<<"\t*注意:删除信息操作非常危险,如果要进行操作"<<endl;
	cout<<"\t**********************************************"<<endl;
	cout<<"\t*请输入boss的名字来验证你的身份:";
	//cin>>name;
	name = PasswordSecret();
	queryuser = "SELECT user FROM user";
	mysql_query(conn, "set names GBK");
    mysql_query(conn, queryuser.c_str());
    res = mysql_store_result(conn);//获取结果集
    row = mysql_fetch_row(res);
    if(row[0]==name)
    {
    	cout<<endl;
    	cout<<"\t你的身份通过了,你可以进行删除操作"<<endl; 
    	cout<<endl;
	}
	else{
		cout<<endl;
		cout<<"\tboss的名字都不清楚,还想操作?"<<endl;
		cout<<endl;
		return 0;
	}
	string sno;
	cout<<"请输入要删除学生的学号:";
	cin>>sno;
	query = "delete FROM student where sno='"+sno+"'";
	cout<<query<<endl;
	if (mysql_query(conn, query.c_str()))        //执行SQL语句  
	{
		printf("delete failed (%s)\n", mysql_error(conn));
		return false;
	}
	else
	{
		printf("delete success\n");
		return true;
	}
}
//shifan
void FreeConnect()
{
	mysql_free_result(res);  //释放一个结果集合使用的内存。
	mysql_close(conn);	 //关闭一个服务器连接。
}
//密码验证登录 
bool mytoken()
{
	string user,password;
	string querytoken;
	cout<<endl;
	cout<<endl;
	cout<<endl;
	cout<<" 请输入账号: ";
	cin>>user;
	cout<<" 请输入密码: ";
	password = PasswordSecret();
	cout<<endl;
	querytoken = "SELECT user,password FROM token";
	mysql_query(conn, "set names GBK");
    mysql_query(conn, querytoken.c_str());
    res = mysql_store_result(conn);//获取结果集
    row = mysql_fetch_row(res);
    if(row[0] == user&&row[1]==password) 
	{
		cout<<"---正在登录---"<<endl; 
		Sleep(3*1000); 
		cout<<"---登录成功---"<<endl;
		return true;
	}
	else{
		cout<<"---密码或者账号错误,登录失败---"<<endl;
		return false;
	}
}
int main() {
	int choice;
	//连接数据库,没有连上不让操作 
	if(!ConnectDatabase())
	{
		return 0;
	}
	//做密码验证登录选项,密码错误直接退出 
	if(!mytoken())
	{
		return 0;
	}
      do{
      	system("pause");
      	system("cls");
		printf("\n\n");
		printf("%*s%s",10," ","********** 学 生 宿 舍 管 理 系 统 **********\n\n");
		printf("%*s%s",25," ","1.查看学生信息\n\n");
		printf("%*s%s",25," ","2.查看部分信息\n\n");
	   	printf("%*s%s",25," ","3.添加学生信息\n\n");
	   	printf("%*s%s",25," ","4.删除学生信息\n\n");
	   	printf("%*s%s",25," ","5.修改学生信息\n\n");
	   	printf("%*s%s",25," ","0.退出系统\n\n");
	   	printf("%*s%s",10," ","*********************************************\n\n");
	   	printf("%*s%s",10," ","请选择0-4之间任意整数:");
		scanf("%d",&choice); 
		printf("\n");
       switch(choice)
       {
         case 1:QueryDatabase1();break;
         case 2:QueryDatabase2();break;
         case 3:InsertData();break;
         case 4:DeleteData();break;
         case 5:changedata();break;
         case 0:break;
       }
       
     }while(choice!=0);
	FreeConnect();
	return 0;
	
}
	
	

部分演示图片:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值