学生成绩管理系统-MySQL版-Part2-主干代码
本文已被浏览4723次
主干代码故名思义,此部分是连接整个程序所有代码的核心骨干部分,是程序运行的起始点main函数所在之处。
在这部分中有一些其他的函数,将会在其他part中提到,只要把每个part中的代码合起来,就能编译不出问题。
#include <stdio.h>
#include <windows.h>
//mysql头文件前需要加windows.h,其中有关socket的函数是必须的
#include <mysql.h>
#include <conio.h>
//声明mysql的查询及数据储存变量
MYSQL mysql;
//查询到的结果
MYSQL_RES *result;
//从结果中获取到的每行
MYSQL_ROW row;
//查询到的表头
MYSQL_FIELD *field;
//服务器地址
char Host[15];
//服务器端口
char Port[8];
//登录用户名
char Username[10];
//密码
char Password[20];
//数据库
char DB[10];
char me[1000];
//当前用户
char Current_User[100]="Jerry";
//函数原型列表,到了具体函数的部分再说
int LoadSettings();
int Install(int mode);
int Connect_DB();
void ChangeColorScreen(const char* color);
void ChangeWindowSize(int Width,int Height);
void Pause(int mode);
void CS();
void Login();
void Exit();
void ChangeWindowSize(int Width,int Height);
void ChangeWindowTitle(const char* title);
void Add_Score();
int Export_Score();
int Change_Score();
int Query_Score();
int Analysis_Score();
int Change_Password();
int Commander(int argc,char* argv[]);
//核心函数
//读取数据
int LoadSettings(){
char select;
//在同目录下有一个Config.ini文件,存有安装时输入的数据库设置参数
//这里就直接调用Windows的API读取数据了
GetPrivateProfileString("DATABASE","MYSQL_HOST","NULL",Host, sizeof(Host)-1, "./Config.ini");
GetPrivateProfileString("DATABASE","MYSQL_PORT","NULL",Port, sizeof(Port)-1, "./Config.ini");
GetPrivateProfileString("DATABASE","MYSQL_USER","NULL",Username, sizeof(Username)-1, "./Config.ini");
GetPrivateProfileString("DATABASE","MYSQL_PASS","NULL",Password, sizeof(Password)-1, "./Config.ini");
GetPrivateProfileString("DATABASE","MYSQL_DB",NULL,DB, sizeof(DB)-1, "./Config.ini");
if(!strcmp(Host,"NULL")||!strcmp(Port,"NULL")||!strcmp(Username,"NULL")){
Install(0);
return 0;
}
//确定是否能登录数据库,以判断配置文件是否正确
C_My:if(!Connect_DB(1)){
printf("无法根据设置文件中的参数登录Mysql,请选择接下来的操作:n");
printf("[R]重试 [C]重新配置数据库 [Q]退出n");
printf(">");
select=getch();
switch(select){
case 'R':
case 'r':
CS();
printf("正在重试...n");
goto C_My;
break;
case 'C':
case 'c':
Install(1);
break;
case 'Q':
case 'q':
exit(1);
break;
}
return 0;
}
//如果文件损坏,调用安装
if(!strcmp(DB,"NULL")){
Install(2);
}
return 0;
}
//Core
void Core(){
char select=0;
char cmd[1000];
CS();
ChangeWindowSize(47,19);
ChangeWindowTitle("主菜单");
ChangeColorScreen("1f");
printf("╔═════════════════════╗n");
printf("║ 学生成绩管理系统 ║n");
printf("║ 酷炫狂拽的MySQL版→_→ ║n");
printf("╟─────────────────────╢n");
printf("║ 请输入对应的标号进行不同的操作: ║n");
printf("║ [1] 导入成绩 ║n");
printf("║ [2] 输出成绩 ║n");
printf("║ [3] 更改成绩 ║n");
printf("║ [4] 查询成绩 ║n");
printf("║ [5] 成绩分析 ║n");
printf("║ [6] 更改用户密码 ║n");
printf("╟─────────────────────╢n");
printf("║ [X] 退出 [A]关于 ║n");
printf("╟─────────────────────╢n");
printf("║ JerrySoft Copyright. ║n");
printf("╚═════════════════════╝n");
printf(">"); //这个窗体绘制的有点蛋疼,用本博客写过的一个函数比较好
fflush(stdin);
select=getch();
switch(select){
//下面就是分别调用不同的函数了
case '1':
Add_Score();
break;
case '2':
Export_Score();
break;
case '3':
Change_Score();
break;
case '4':
Query_Score();
break;
case '5':
Analysis_Score();
break;
case '6':
Change_Password();
break;
case 'x':
case 'X':
Exit();
break;
case 'A':
case 'a':
ChangeWindowTitle("关于");
ChangeWindowSize(49,23);
sprintf(cmd,"%s /about",me);
CS();
system(cmd);
printf("按任意键返回主菜单!");
Pause(0);
break;
default:
CS();
ChangeWindowTitle("字段错误");
ChangeWindowSize(26,9);
ChangeColorScreen("0f");
printf("╔══════════╗n");
printf("║ 学生成绩管理系统 ║n");
printf("║ 基于MySQL ║n");
printf("╟──────────╢n");
printf("║ >请输入正确的内容!<║n");
printf("╚══════════╝n");
Sleep(2000);
break;
}
Core();
}
//程序入口
int main(int argc,char *argv[]){
strcpy(me,argv[0]);
//me是个用了存储命令行指令的,用处不大
if(argc>1){
exit(Commander(argc,argv));
}
//读取设置
LoadSettings();
if(mysql_query(&mysql,"SELECT 1+1")){
//重新连接数据库
Connect_DB(0);
}
//调用登录
Login();
//调用核心
Core();
return 0;
}
程序写到这里,排除那些不存在的函数,就已经可以显示一个框子了
评论
您需要 先登录 才可以回复.