学生成绩管理系统
开发背景
随着科技的发展,基本上所有的具有一定数量数据的机构都开始使用计算机数据库来做管理。几乎所有学校也都已经在使用计算机管理数据的机制,大大减少了学校学生成绩管理的工作量。该课程设计要求设计一个学生成绩的数据库管理系统,数据库中要求包含学生的基本信息,课程基本信息,以及学生所学课程的考试成绩。要方便学生进行成绩查询,通过该课程设计,应该达到把数据库理论知识更加的巩固加深,加强动手能力与实践能力,学以致用,与现实生活中的应用充分的结合起来。
开发意义
在各大中小学校,用计算机管理学校的信息已经越来越普遍了。用计算机不但可以提高工作效率,而且还节省了许多人力物力,增强了学校资料的安全性。提高了学校的管理能力,为学生提供优质的可视服务,家长也可以远程访问。为此,用计算机来管理学校的成绩信息,是非常必要的。
一:构建数据库
ER
图:
一共有3张表。
表一:student
是存储学生信息的表其元素有(学生姓名,学生学号,学生班级)
表二:transcript
是成绩表,其元素有(学生学号,科目编号,成绩)
表三:course
是科目表,其元素有(科目编号,科目名称)。
通过ER图生成建表的SQL语句:
建表 course
建表student
建表 transcript:
建表结果截图:
学生表中已经有程序测试后的类容了:
科目表:
成绩表:
二:程序代码:
接口函数代码:
//================app_mysql.h=================
typedef struct{
int s_id;
int score[5][2];
char s_name[100];
char s_class[100];
int average;
}current_stu;
//全局结构体。是函数中数据传递的结构体
typedef struct{
int s_id;
int score[5][2];
}current_score;
int
database_start(char *name,
char
*password);//链接数据库
void database_end();//退出数据库
//int get_student_id(char
*student);
//下面都是系统功能实现的数据库的函数
int add_stu(int *s_id,char *s_name,char *s_class);
int get_course_name(int c_id,char
*c_name);
int add_transcript(int s_id,int
c_id,int score);
int get_average(int s_id);
int get_score(int s_id,current_score *dest);
int get_student(int s_id,current_stu *dest);
int delete_stu(int s_id);
int update_score(int s_id,int
c_id,int score);
int get_number();
int get_all_id(int *All_student_id);//shu zu All_student_id,fanhui shu
mu
//================app_mysql.c=================
//========功能实现函数的定义==================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "app_mysql.h"
#include "/usr/include/mysql/mysql.h"
static MYSQL my_connection;
static int
dbconnected = 0;
//static int
All_student_id[100]={0};
//============链接和断开数据库===========
int database_start(char *name, char *pwd) {
if (dbconnected) return 1;
mysql_init(&my_connection);
if
(!mysql_real_connect(&my_connection, "localhost", name, pwd, "transcript", 0, NULL, 0)) {
fprintf(stderr, "Database connection
failure: %d, %s\n",
mysql_errno(&my_connection),
mysql_error(&my_connection));
return 0;
}
dbconnected = 1;
return 1;
}
void database_end() {
if (dbconnected)
mysql_close(&my_connection);
dbconnected = 0;
}
//=================添加学生信息功能函数===============
int add_stu(int *s_id,char *s_name,char *s_class)
{
MYSQL_RES *res_ptr;
MYSQL_ROW mysqlrow;
int res;
char is[100];
char es[100];
char es2[100];
int new_s_id=-1;
if (!dbconnected) return 0;
mysql_escape_string(es, s_name, strlen(s_name));
mysql_escape_string(es2, s_class, strlen(s_class));
sprintf(is, "insert into
student(S_ID,S_name,S_class) values(%d,'%s','%s')", *s_id,
es, es2);
//SQL语句对数据库进行操作
res = mysql_query(&my_connection, is);
if (res) {
fprintf(stderr, "Insert error %d:
%s\n", mysql_errno(&my_connection),
mysql_error(&my_connection));
return 0;
}
res = mysql_query(&my_connection, "SELECT LAST_INSERT_ID()");
if (res) {
printf("SELECT error: %s\n",
mysql_error(&my_connection));
return 0;
} else {
res_ptr =
mysql_use_result(&my_connection);
//如果链接数据库没有错误后,将把新建的数据输入到数据库中。
if (res_ptr) {
if ((mysqlrow =
mysql_fetch_row(res_ptr))) {
sscanf(mysqlrow[0], "%d",
&new_s_id);
}
mysql_free_result(res_ptr);
}
*s_id = new_s_id;
if (new_s_id != -1) return 1;
return 0;
}
}
int get_course_name(int c_id,char
*c_name)//查询数据库里的内容(科目信息)
{
MYSQL_RES *res_ptr;
MYSQL_ROW
mysqlrow;
int res;
char qs[100];
char is[100];
char es[100];
sprintf(qs,
"SELECT C_name FROM course where
C_ID=%d", c_id);//SQL
语句
res =
mysql_query(&my_connection, qs);
if (res) {
fprintf(stderr, "SELECT error:
%s\n",
mysql_error(&my_connection));
} else {
res_ptr =
mysql_store_result(&my_connection);
if (res_ptr) {
if (mysql_num_rows(res_ptr)
> 0) {
if (mysqlrow =
mysql_fetch_row(res_ptr)) {
sscanf(mysqlrow[0],
"%s", c_name);//把通过SQL 语句得到的结果放入到结构体中
}
}
mysql_free_result(res_ptr);
}
}
return 0;
}
//============添加进入学生的成绩信息
int add_transcript(int s_id,int
c_id,int score)
{
MYSQL_RES
*res_ptr;
MYSQL_ROW
mysqlrow;
int res;
char qs[100];
char is[100];
char es[100];
sprintf(qs,
"insert into transcript
values(%d,%d,%d)", c_id,s_id,score);
res =
mysql_query(&my_connection, qs);
if (res) {
fprintf(stderr, "Intert error %d:
%s\n",
mysql_errno(&my_connection),mysql_error(&my_connection));
}
return 0;
}
//===========查找出学生信息============
int get_student(int s_id,current_stu *dest)
{
MYSQL_RES *res_ptr;
MYSQL_ROW
mysqlrow;
int res;
char qs[100];
int i = 0;
current_score
score;
if (!dbconnected) return 0;
memset(dest, 0,
sizeof(*dest));
memset(&score, 0, sizeof(score));
dest->s_id=s_id;
sprintf(qs,
"select S_ID,S_name,S_class from
student where S_ID=%d", s_id);
res =
mysql_query(&my_connection, qs);
if (res) {
fprintf(stderr, "SELECT error:
%s\n",
mysql_error(&my_connection));
} else {
res_ptr =
mysql_store_result(&my_connection);
if (res_ptr) {
//===============把从数据库中的到的数据导入到结构体中
if
(mysqlrow=mysql_fetch_row(res_ptr)) {
strcpy(dest->s_name,mysqlrow[1]);
strcpy(dest->s_class,mysqlrow[2]);
}
mysql_free_result(res_ptr);
}
}//end_else
dest->average = get_average(s_id);
get_score(s_id,&score);
for(i=0;i<5;i++){
dest->score[i][0]=score.score[i][0];
dest->score[i][1]=score.score[i][1];
}
return 0;
}
//======================显示所有人的成绩==================
int get_average(int s_id)
{
MYSQL_RES *res_ptr;
MYSQL_ROW
mysqlrow;
int res;
char qs[100];
int avg;
if (!dbconnected) return 0;
sprintf(qs,
"SELECT avg(T_score) FROM transcript
where S_ID=%d group by S_ID", s_id);
res =
mysql_query(&my_connection, qs);
if (res) {
fprintf(stderr, "SELECT error:
%s\n",
mysql_error(&my_connection));
} else {
res_ptr =
mysql_store_result(&my_connection);
if (res_ptr) {
if (mysql_num_rows(res_ptr)
> 0) {
if(mysqlrow=mysql_fetch_row(res_ptr)){
sscanf(mysqlrow[0],"%d",&avg);
}
}
mysql_free_result(res_ptr);
}
}
return avg;
}
//================查询学生成绩======输入的学号=========
int get_score(int s_id,current_score *dest)
{
MYSQL_RES *res_ptr;
MYSQL_ROW mysqlrow;
int res;
char qs[100];
int i = 0,num_tracks=0;
if (!dbconnected) return 0;
memset(dest, 0, sizeof(*dest));
dest->s_id = s_id;
sprintf(qs, "SELECT C_ID,T_score FROM
transcript where S_ID=%d order by C_ID", s_id);
res = mysql_query(&my_connection, qs);
if (res) {
fprintf(stderr, "SELECT error:
%s\n",
mysql_error(&my_connection));
} else {
res_ptr =
mysql_store_result(&my_connection);
if (res_ptr) {
if ((num_tracks =
mysql_num_rows(res_ptr)) > 0) {
while
(mysqlrow = mysql_fetch_row(res_ptr)) {
sscanf(mysqlrow[0],"%d",&dest->score[i][0]);
sscanf(mysqlrow[1],"%d",&dest->score[i][1]);
i++;
}
}
mysql_free_result(res_ptr);
}
}
return 0;
}
//=======删除学生信息=========================
int delete_stu(int s_id)
{
MYSQL_RES *res_ptr;
MYSQL_ROW mysqlrow;
int res;
char qs[100];
if (!dbconnected) return 0;
sprintf(qs, "delete from transcript
where S_ID=%d", s_id);
res
= mysql_query(&my_connection, qs);
if (res) {
fprintf(stderr, "Delete error (track)
%d: %s\n", mysql_errno(&my_connection),
mysql_error(&my_connection));
return 0;
}
sprintf(qs, "delete from student where
S_ID=%d", s_id);
res = mysql_query(&my_connection, qs);
if (res) {
fprintf(stderr, "Delete error (track)
%d: %s\n", mysql_errno(&my_connection),
mysql_error(&my_connection));
return 0;
}
return 1;
}
//===============修改成绩=======================
int update_score(int s_id,int
c_id,int score)
{
MYSQL_RES *res_ptr;
MYSQL_ROW mysqlrow;
int res;
char qs[100];
if (!dbconnected) return 0;
sprintf(qs, "update transcript set
T_score=%d where C_ID=%d and S_ID=%d",
score,c_id,s_id);
res = mysql_query(&my_connection, qs);
if (res) {
fprintf(stderr, "Insert error %d:
%s\n",
mysql_errno(&my_connection),mysql_error(&my_connection));
return 1;
}
return 0;
}
//================显示输入的学生总数=====================
int get_number()
{
MYSQL_RES *res_ptr;
MYSQL_ROW mysqlrow;
int res;
int num=-1;
if (!dbconnected) return 0;
res = mysql_query(&my_connection, "select count(*) from student");
if (res) {
printf("SELECT error: %s\n",
mysql_error(&my_connection));
return 0;
} else {
res_ptr =
mysql_use_result(&my_connection);
if (res_ptr) {
if ((mysqlrow =
mysql_fetch_row(res_ptr))) {
sscanf(mysqlrow[0], "%d",
&num);
}
mysql_free_result(res_ptr);
}
if (num != -1) return num;
return 1;
}
}
//================显示学生的学号========================
int get_all_id(int *All_student_id)
{
MYSQL_RES *res_ptr;
MYSQL_ROW mysqlrow;
int res;
int num=-1;
int i=0;
if (!dbconnected) return 0;
res = mysql_query(&my_connection, "SELECT S_ID FROM student order by
S_ID");
if (res) {
printf("SELECT error: %s\n",
mysql_error(&my_connection));
return 0;
} else {
res_ptr =
mysql_store_result(&my_connection);
if (res_ptr) {
if((num=mysql_num_rows(res_ptr))>0){
while ((mysqlrow =
mysql_fetch_row(res_ptr))) {
sscanf(mysqlrow[0],"%d",&All_student_id[i]);
i++;
}
mysql_free_result(res_ptr);
}
}
if (num != -1) return i;
return 1;
}
}
界面函数代码
//==================ui_mysql.h=============
#define TMP_STRING_LEN 70
//================枚举类型结构=======================
//==========对应界面的每个功能选项===============
typedef enum
{
mo_invalid,
mo_add_stu,
mo_add_tran,
mo_del_stu,
mo_find_stu,
mo_list_stu,
mo_update_score,
mo_count_entries,
mo_exit
}menu_options;
加载中,请稍候......