通过这几天学习Mysql数据库,对其也有了基本的了解,为了加深印象,于是就写了一个最简易的学生信息管理系统。

一:基本要求

1.通过已知用户名和密码进行登录;

2.可以显示菜单;

3.可以随时插入学生信息;

4.可以删除学生信息;

5.可以通过学生姓名或学号显示学生所有信息;

还可以修改学生信息,添加学生表格属性等等,,,这些实现都基本类似上述的(这些不想写了,最简易的学生信息管理系统);

二:步骤

1.写一个sql脚本,包括创建数据库,使用数据库,创建学生信息表格,插入大部分学生信息。

student_information.sql

create database school_db character set gbk;

use school_db;

create table students (
student_id int unsigned not null primary key,
name char() not null,
sex char() not null,
birth date not null,
politily char() not null
); insert into students values (,"张三","男","1994-12-2","自动化1");
insert into students values (,"李四","男","1989-10-8","自动化2");
insert into students values (,"王五","男","1994-8-8","自动化2");
insert into students values (,"路人1","女","1994-7-9","自动化2");
insert into students values (,"路人2","男","1994-12-8","自动化2");
insert into students values (,"路人3","女","1994-11-8","自动化2");
insert into students values (,"路人4","男","1992-1-23","自动化2"); 。。。。

  执行脚本:

    第一种方法: mysql -h localhost -u root -p 密码  <  student_information.sql;

    第二种方法:已经登录了mysql,  source  student_information.sql;

2.编写代码

  

#include <stdlib.h>
#include <stdio.h>
#include <mysql.h>
#include <ctype.h>
#include <curses.h> //#define MAX_PASSWD_LEN 16 void printf_mune(void);
char *getPasswd(void);
int insert_student(void);
int delete_student(void);
int inquiry_student(void); int main(int argc,char** argv)
{
char user[];
char passwd[];
char c;
int i;
printf("***********************************************************\n");
printf("* welcome to student information managent system *\n");
printf("***********************************************************\n");
// printf(" user: ______________\b\b\b\b\b\b\b\b\n");
// printf(" psaawd:______\b\b\b\b\b\b\n"); while(){ printf(" user:");
scanf("%s", user); printf(" passwd:"); scanf("%s",passwd); /* while ((c=getch())!='\n')
{
if (i<MAX_PASSWD_LEN && isprint(c)) //isprint函数判断c是否是可打印字符
{
passwd[i++] = c;
putchar('*');
}
else if (i>0 && c=='\b')
{
--i;
putchar('\b');
putchar(' ');
putchar('\b');
}
}
putchar('\n');
passwd[i] = '\0'; */ if(!strncmp(user, "qigaohua", )){
if(!strncmp(passwd, "", ))
break;
else {
printf("passwd error\n");
continue;
}
}else{
printf("user error\n");
continue;
}
} printf("login sucess\n");
while(){
printf_mune();
getchar(); //问题1 必须加
c = fgetc(stdin);
switch(c){
case 'I':
insert_student();
break;
case 'D':
delete_student();
break;
case 'S':
inquiry_student();
break;
case 'Q':
return ;
break;
default:
;
}
}
printf("exit sucess\n");
return ; } /*getc()和getchar()函数想必大家都经常用到,但它们都在输入的同时显示输入内容,并由回车终止输入。
为了不显示输入内容,我们调用另外一个函数getch(),它包含在头文件中。该函数可以在输入的同时不显示
输入内容,并在输入完成后不需回车而自动终止输入。与此同时,该头文件中还包含另外一个函数getche(),
它和getch()功能相同,唯一的区别是输入的同时显示输入的内容。本文我们只用到getch();*/
/*char *getPasswd()
{
unsigned char c;
passwd =(char*)malloc(8);
int i = 0; while ((c=getch())!='\r')
{
if (i<MAX_PASSWD_LEN && isprint(c)) //isprint函数判断c是否是可打印字符
{
passwd[i++] = c;
putchar('*');
}
else if (i>0 && c=='\b')
{
--i;
putchar('\b');
putchar(' ');
putchar('\b');
}
}
putchar('\n');
passwd[i] = '\0'; return passwd;
}*/ void printf_mune(void)
{
printf("The following operations can be performed\n");
printf("1. insert student information input I\n");
printf("2. delete student information input D\n");
printf("3. inquiry student information input S\n");
printf("4. exit student information managent system input Q\n");
} int insert_student(void)
{
MYSQL mysql;
char sql[];
char k;
char id[], name[], sex[],birth[],potility[]; mysql_init(&mysql);
if(!mysql_real_connect(&mysql, "localhost", "root",NULL,"school_db",,NULL,)){
printf("ERROR: %d--%s\n", mysql_errno(&mysql), mysql_error(&mysql));
exit(-);
}
mysql_set_character_set(&mysql, "utf8");
while() { printf("please input student information\n");
printf("student_id: ");
fflush(stdin);
scanf("%s",id);
// fgets(id, 10, stdin);
printf("\nname: ");
scanf("%s",name);
// fgets(name, 20, stdin); printf("\nsex: ");
scanf("%s",sex); printf("\nbirth: ");
scanf("%s",birth);
// fgets(birth, 15, stdin); printf("\npolitily: ");
scanf("%s",potility);
// fgets(potility, 20, stdin); printf("\nplease input y or n or q\n");
// read(stdin, k, 1);
getchar(); //注意要加
k = fgetc(stdin);
if(k == 'n')
continue;
else if(k == 'q')
break;
else if(k == 'y'){
sprintf(sql, "insert into students values (\"%s\", \"%s\", \"%s\", \"%s\", \"%s\");", id, name,sex, birth, potility);
printf("\n%s",sql); if(mysql_query(&mysql, sql)){
printf("\ninsert failed: %d--%s\n", mysql_errno(&mysql), mysql_error(&mysql));
continue;
}
printf("\ninsert sucess\n"); printf("you want exit? input q\n");
getchar();
k = fgetc(stdin);
if(k == 'q')
break;
}
}
mysql_close(&mysql);
return ;
} int delete_student(void)
{
MYSQL mysql;
char sql[];
char id[], name[];
char k; mysql_init(&mysql);
if(!mysql_real_connect(&mysql, "localhost", "root",NULL,"school_db",,NULL,)){
printf("ERROR: %d--%s\n", mysql_errno(&mysql), mysql_error(&mysql));
exit(-);
}
mysql_set_character_set(&mysql, "utf8"); while(){
printf("please input you want delete student id or name, selset i or n or q\n");
getchar(); //注意
k = fgetc(stdin);
if(k == 'i') {
printf("student id: ");
scanf("%s",id);
//fgets(id, 10, stdin);
sprintf(sql, "delete from students where student_id=\"%s\";", id);
}else if(k == 'n'){
printf("\nstudent name: ");
scanf("%s",name);
//fgets(name, 20, stdin);
sprintf(sql, "delete from students where name=\"%s\";", name);
}else if(k == 'q')
break;
printf("\nyou are sure? y or n or q\n");
getchar();
k = fgetc(stdin);
if(k == 'n')
continue;
else if(k == 'y'){
if(mysql_query(&mysql, sql)){
printf("delete failed: %d--%s\n", mysql_errno(&mysql), mysql_error(&mysql));
continue;
}
printf("delete sucess\n");
}
else if(k == 'q')
break;
}
mysql_close(&mysql);
return ;
} int inquiry_student(void)
{
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
MYSQL_FIELD *filed; char sql[];
char id[], name[];
char k; int column,i; my_ulonglong backrows; mysql_init(&mysql);
if(!mysql_real_connect(&mysql, "localhost", "root",NULL,"school_db",,NULL,)){
printf("ERROR: %d--%s\n", mysql_errno(&mysql), mysql_error(&mysql));
exit(-);
}
mysql_set_character_set(&mysql, "utf8"); while(){
printf("please input you want inquiry student id or name, selset i or n or q\n");
getchar(); //标记
k = fgetc(stdin);
if(k == 'i') {
printf("student id: ");
scanf("%s", id);
//fgets(id, 10, stdin);
sprintf(sql, "select * from students where student_id=\"%s\";", id);
printf("sql request:%s\n", sql);
}else if(k == 'n') {
printf("\nstudent name: ");
scanf("%s", name);
//fgets(name, 20, stdin);
sprintf(sql, "select * from students where name=\"%s\";", name);
printf("sql request:%s\n", sql);
}else if(k == 'q')
break;
printf("\nyou are sure? y or n or q\n");
getchar();
k = fgetc(stdin);
if(k == 'n')
continue;
else if(k == 'y'){
if(mysql_query(&mysql, sql)){
printf("delete failed: %d--%s\n", mysql_errno(&mysql), mysql_error(&mysql));
continue;
} res = mysql_store_result(&mysql); //首先判断res是否为NULL来判断是否有数据,但是失败了,不知道为什么,最后用了下面函数
backrows = mysql_num_rows(res);//返回上面函数返回结果的行数 if(backrows != ){
column = mysql_num_fields(res); while((row = mysql_fetch_row(res))){
i = ;
while((filed = mysql_fetch_field(res)) != NULL && (i < column)){
printf("%s:", filed->name);
printf("%s", row[i++]);
printf("\n");
}
printf("\n");
} }else{
printf("no data found\n");
continue;
} printf("inquiry sucess\n");
}
else if(k == 'q')
break;
}
mysql_close(&mysql);
return ;
}

  

   3.编译

   gcc -o students students.c -I /usr/include/mysql/ -L /usr/lib/mysql/ -lmysqlclient -lcurses

  

三:运行现象

  

最后选择Q退出整个系统

虽然所要求的功能基本实现,但是比预先心里所想的还有许多差距,看看程序就知道,改了有改,确实没时间了,就这样吧。

基于数据库MySQL的简易学生信息管理系统的更多相关文章

  1. 基于数组或链表的学生信息管理系统(小学期C语言程序实训)

    1.基于数组的学生信息管理系统 实验内容: 编写并调试程序,实现学校各专业班级学生信息的管理.定义学生信息的结构体类型,包括:学号.姓名.专业.班级.3门成绩. 实验要求: (1) main函数:以菜 ...

  2. c#简易学生信息管理系统

    在近期的学习中,我们学习了泛型及泛型集合的概念和使用,泛型是c#中的一个重要概念,为了巩固我们学习的成果,我们可以使用一个实例来进行练习 题目及要求 要求使用Windows窗体应用程序,制作出如上图的 ...

  3. 一个低级shell简易学生信息管理系统-新增登陆注册功能

    还有bug 不修改了 小声bb一下 这玩意真的要控制版本 随手保存 本来有个超完整的版本 一开心被我rm - f 了 后续还出现了 更多的bug 仔细仔细 源码如下: record=stu.db if ...

  4. Python——面向对象,简易学生信息管理系统

    一.概述 1.1涉及到的知识点 项目开发:创建项目,创建包,导入包: 面向对象:静态方法,继承,内置函数,自定义函数: 数据类型:列表,字典,字符串.列表.字典的转换和自动生成导向: 异常处理:捕获异 ...

  5. 基于JSP+Servlet的学生信息管理系统

    JavaWeb期末项目,一个基于JSP和Servlet的学生信息管理系统实现,前端用了bootstrap和一些自定义的css样式,数据库用了mysql 传送门: GitHub 实现功能 登录(教师, ...

  6. [项目分享]JSP+Servlet+JDBC实现的学生信息管理系统

    本文存在视频版本,请知悉 项目简介 项目来源于:https://gitee.com/liu_xu111/JavaWeb01 这次分享一个学生管理系统,我感觉这是程序员在大学时期的毕设和课程设计选择最多 ...

  7. 基于Spring MVC + Spring + MyBatis的【学生信息管理系统】

    资源下载:https://download.csdn.net/download/weixin_44893902/45603211 练习点设计: 模糊查询.删除.新增 一.语言和环境 实现语言:JAVA ...

  8. asp.net+sql数据库学生信息管理系统

    一款学生信息管理系统送给大家. 功能部分: 1.教师管理(添加,修改,删除,查看) 2.学生管理(添加,修改,删除,查看) 3.班级管理(添加,修改,删除,查看) 4.学生成绩管理(添加,修改,删除, ...

  9. 学生信息管理系统总结——student数据库中表关系分析

    说到关系,那就不得不提两个东西: 1.E-R图,也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型.属性和联系的方法,用来描述现实世界的概念模型 2.关系模 ...

随机推荐

  1. C#中MySQL数据库的备份 还原 初始化

    直接在cmd执行如下代码: mysqldump -h localhost -uroot -p123 --default-character-set=utf8 --opt --disable-keys ...

  2. Java 设计模式之代理模式

    1.  定义:为其它对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 2.  类图:代理对象和被代理 ...

  3. Bootstrap<基础十五> 输入框组

    Bootstrap 支持的另一个特性,输入框组.输入框组扩展自 表单控件.使用输入框组,可以很容易地向基于文本的输入框添加作为前缀和后缀的文本或按钮. 通过向输入域添加前缀和后缀的内容,您可以向用户输 ...

  4. VScode调试Python

    第一步,确保装上了PYTHON扩展 然后打开文件夹(这个东西必须打开文件夹才能进行调试,不能打开一个文件就调试) 打开文件夹后,那里显示没有配置,这时需要你按下F5 弹出选择环境,点击Python 它 ...

  5. java 读取properties文件

    import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class Ge ...

  6. Javascript DOM编程艺术 语法部分

    1.变量,可以变化的东西我们称为变量,随着年龄的增大,我们的age不断变大 2.Javascript变量声明用var,可以不声明变量类型.尽量声明为一个字符串字面量. 3.弱类型:要求程序员必须明确的 ...

  7. [WinForm] VS2010发布、打包安装程序

    最近用到了VS2010WinForm的程序打包功能,网上发现一篇好帖,在此记录以供日后他人之需. 原文链接地址:http://www.mamicode.com/info-detail-2453.htm ...

  8. Mysql EF Code First

    1.更新程序包EntityFramework->6.1.3 2.下载程序包MySql.Data.Entities(Ver:6.8.3) 3.修改config.cs或者web.config,包含以 ...

  9. LeetCode Reorder List

    struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution ...

  10. 解决protobuf不能直接在IOS上使用,利用protobuf-net在IOS上通讯

    ---------------------------------------------------------------------------------------------------- ...