学生成绩管理系统-MySQL版-Part9-修改数据
本文已被浏览5120次
对于数据库来说,总体共有添删查改四项,现在已经有了两项添加和查找,而删除和修改还没有,这次先搞下修改的功能。(删除对于学生成绩管理系统则并没有什么卵用,所以也就省了。)
修改的话对于修改成绩信息来说虽然有些危险,可能导致数据被篡改,但是还是留下了这个功能。
Update是SQL中的修改语句,最基本的语法是
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
从整体看,这个部分分为四个部分:
1、重新确认是否要修改数据
这一部分并不需要很复杂,一个输入,一个判断即可
2、获取修改的目标条目
这里并不考虑要全部读取数据,如果全部列举数据,存在影响UI体验的因素,故没有列举数据,而是采用了搜索的方式。
3、获取修改后数据
修改后的数据是指修改那科(或者学号)修改成具体值。
4、执行查询
最后上代码:
//引入头文件 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <windows.h> #include <mysql.h> #include <conio.h> //继承变量 extern MYSQL mysql; extern MYSQL_RES *result; extern MYSQL_ROW row; extern MYSQL_FIELD *field; //没有什么卵用的几个变量 char Host[15]; char Port[8]; char Username[10]; char Password[20]; char DB[10]; //函数原型列表 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 strrpl(char* pDstOut, char* pSrcIn, const char* pSrcRpl, const char* pDstRpl); int Sum_ints(int number); int Change_Score_Confirm(); int Change_Score_Menu(); int Change_Score_Update(int Target); int Get_Score_Table(int Index,char *str); int Show_Table(const char *tablename,const char *title,const char *sqlplus); int ReCalculate(const char *tablename,int id); //功能入口主函数 int Change_Score() { //最后确认要改成绩 if(!Change_Score_Confirm()) { return 0; } ChangeColorScreen("1f"); //进入功能菜单 Change_Score_Menu(); return 0; } //打印确认信息 int Change_Score_Confirm() { int select; CSC: CS(); ChangeWindowTitle("警告!"); ChangeColorScreen("cf"); ChangeWindowSize(63,13); printf("╔═════════════════════════════╗n"); printf("║ 学生成绩管理系统 ║n"); printf("║ 基于MySQL ║n"); printf("╟─────────────────────────────╢n"); printf("║ 警告:如果您不是成绩管理人员,请自觉按N! ║n"); printf("║ 本操作不可撤销,故请再次斟酌后选择是否进行此操作! ║n"); printf("║ [Y]是 [N]否 ║n"); printf("╟─────────────────────────────╢n"); printf("║ JerrySoft Copyright. ║n"); printf("╚═════════════════════════════╝n"); printf("[Y/N]"); fflush(stdin); select=getch(); switch(select) { case 'Y': case 'y': return 1; case 'N': case 'n': return 0; default: printf(""); goto CSC; } } //主菜单 int Change_Score_Menu() { char sql[100],temp[100],select[10]; int lines,item=1,i; ChangeWindowTitle("更改成绩"); //获取所有的成绩数据表 sprintf(sql,"Show Tables like 'scm_class_%%'"); mysql_query(&mysql,sql); result=mysql_store_result(&mysql); lines=mysql_num_rows(result); ChangeWindowSize(40,lines+14); //打印列表 printf("╔═════════════════╗n"); printf("║ 学生成绩管理系统 ║n"); printf("║ 更改成绩单 ║n"); printf("╟─────────────────╢n"); //判断是否存在可修改的成绩单 if(lines==0) { printf("║ 当前数据库中没有可用成绩单! ║n"); printf("║ 按任意键返回主菜单! ║n"); printf("╟─────────────────╢n"); printf("║ JerrySoft Copyright. ║n"); printf("╚═════════════════╝n>"); Pause(0); return 0; } printf("║ 请选择希望更改的成绩单: ║n"); while((row=mysql_fetch_row(result))) { strrpl(temp,row[0],"scm_class_",""); printf("║ [%d] %s",item,temp); for(i=strlen(temp)+Sum_ints(item)-1; i<28; i++) { printf(" "); } printf("║n"); item++; } printf("╟─────────────────╢n"); printf("║ [B] 返回上级菜单 ║n"); printf("╟─────────────────╢n"); printf("║ JerrySoft Copyright. ║n"); printf("╚═════════════════╝n>"); fflush(stdin); gets(select); //如果用户选定数据表,进入更改函数 if(atoi(select)>0&&atoi(select)<item) { Change_Score_Update(atoi(select)); } else if(strcasecmp(select,"B")==0) { return 0; } else { printf("请输入有效数据!"); Sleep(1000); } Change_Score_Menu(); return 0; } //执行修改成绩 int Change_Score_Update(int Target) { int i,j,peosum; char sql[100],TableName[20]; char ClassName[10],Input[30]; char Fields[100][20]; Get_Score_Table(Target,TableName); strrpl(ClassName,TableName,"scm_class_",""); sprintf(sql,"SELECT * From %s",TableName); mysql_query(&mysql,sql); result=mysql_store_result(&mysql); //判断选定的成绩单是否存在数据 if(mysql_num_rows(result)==0) { CS(); printf("%s的成绩单中不包含任何数据,请导入数据后再试!n",ClassName); Sleep(1000); return 0; } peosum=mysql_num_rows(result); CS_U: CS(); ChangeWindowSize(63,13); printf("╔═════════════════════════════╗n"); printf("║ 学生成绩管理系统 ║n"); printf("║ 基于MySQL ║n"); printf("╟─────────────────────────────╢n"); printf("║ 当前在%s中共计有%d个同学:",ClassName,peosum); for(i=0; i<41-strlen(ClassName)*2-Sum_ints(peosum); i++) { printf(" "); } printf("║n"); printf("║ 请输入需要修改的同学姓名: ║n" "║ 如需查看成绩单请输入Show,返回上层菜单请输入Back ║n"); printf("╟─────────────────────────────╢n"); printf("║ JerrySoft Copyright. ║n"); printf("╚═════════════════════════════╝n>"); fflush(stdin); //提示选择姓名 scanf("%s",Input); if(strcasecmp(Input,"Show")==0) { Show_Table(TableName,"修改成绩-查看成绩单",""); Pause(1); goto CS_U; } else if(strcasecmp(Input,"Back")==0) { return 0; } sprintf(sql,"SELECT * FROM %s WHERE 姓名='%s'",TableName,Input); mysql_query(&mysql,sql); result=mysql_store_result(&mysql); //检查是否存在名为Input的同学 if(mysql_num_rows(result)==0) { ChangeWindowSize(63,10); printf("╔═════════════════════════════╗n"); printf("║ 学生成绩管理系统 ║n"); printf("║ 基于MySQL ║n"); printf("╟─────────────────────────────╢n"); printf("║ 您输入的姓名无效: ║n"); printf("║ 在班级%s中没有名为%s的同学!",ClassName,Input); for(i=0; i<41-strlen(ClassName)*2-strlen(Input)*2; i++) { printf(" "); } printf("║n"); printf("╟─────────────────────────────╢n"); printf("║ JerrySoft Copyright. ║n"); printf("╚═════════════════════════════╝n"); Sleep(1000); goto CS_U; } //存在后询问修改的字段和修改后的值 ChangeWindowSize(63,9+mysql_num_fields(result)); CS(); printf("╔═════════════════════════════╗n"); printf("║ 学生成绩管理系统 ║n"); printf("║ 基于MySQL ║n"); printf("╟─────────────────────────────╢n"); printf("║ 请输入需要修改的内容: ║n"); row=mysql_fetch_row(result); field=mysql_fetch_field(result); field=mysql_fetch_field(result); printf("║ [1] %s:%s",field->name,row[1]); strcpy(Fields[1],field->name); for(j=0; j<60-(field->name_length)*2-strlen(row[1])*2; j++) { printf(" "); } printf("║n"); field=mysql_fetch_field(result); for(i=3; i<mysql_num_fields(result); i++) { field=mysql_fetch_field(result); if(i>2&&i<mysql_num_fields(result)-2) { peosum=i-1; strcpy(Fields[i-1],field->name); printf("║ [%d] %s:%s",i-1,field->name,row[i]); for(j=0; j<59-Sum_ints(i-1)-field->name_length*2-strlen(row[i])*2; j++) { printf(" "); } printf("║n"); } } printf("╟─────────────────────────────╢n"); printf("║ 例如:如果您希望将学号改为1000请输入[1]1000([序号]修改后 ║n"); printf("║ 的成绩) ║n"); printf("╟─────────────────────────────╢n"); printf("║ JerrySoft Copyright. ║n"); printf("╚═════════════════════════════╝n[int]str>"); strcpy(Input,""); CS_SF: fflush(stdin); //根据提示[序号]修改值获取值 scanf("[%d]%s",&i,Input); //判断值的内容格式 if(i<0||i>peosum||strlen(Input)==0) { printf("您输入的信息有误!n"); Sleep(1000); goto CS_SF; } //构建mysql查询语句并执行 sprintf(sql,"UPDATE %s SET %s=%s WHERE ID=%s",TableName,Fields[i],Input,row[0]); if(!mysql_query(&mysql,sql)) { printf("更改成功!n"); //在更改完数据后一定要重新计算总分/平均分 ReCalculate(TableName,atoi(row[0])); Sleep(1000); } else { printf("更改失败!n可能是由于您输入的数据类型有误,请重试!n"); Sleep(1000); } return 0; }
评论
您需要 先登录 才可以回复.