程序课程设计报告
设计要求:设计一个系统能够满足对数据的增删改查操作,所以用数据库实现对数据的增删改查,有学生的姓名,性别,宿舍等相关信息。
实验所用软件: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;
}
部分演示图片: