加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Linux 下MySql 学生管理软件(1)

(2011-08-12 12:40:50)
标签:

linux

数据库

学生成绩

c语言

mysql

it

分类: 风雨很温柔

                    学生成绩管理系统

开发背景

随着科技的发展,基本上所有的具有一定数量数据的机构都开始使用计算机数据库来做管理。几乎所有学校也都已经在使用计算机管理数据的机制,大大减少了学校学生成绩管理的工作量。该课程设计要求设计一个学生成绩的数据库管理系统,数据库中要求包含学生的基本信息,课程基本信息,以及学生所学课程的考试成绩。要方便学生进行成绩查询,通过该课程设计,应该达到把数据库理论知识更加的巩固加深,加强动手能力与实践能力,学以致用,与现实生活中的应用充分的结合起来。

开发意义

    在各大中小学校,用计算机管理学校的信息已经越来越普遍了。用计算机不但可以提高工作效率,而且还节省了许多人力物力,增强了学校资料的安全性。提高了学校的管理能力,为学生提供优质的可视服务,家长也可以远程访问。为此,用计算机来管理学校的成绩信息,是非常必要的。

 

一:构建数据库

      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;

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有