虚拟机基于gcc编译的学生管理系统(简单实现功能)

虚拟机基于gcc编译的学生管理

代码展示

#include <stdio.h>
#include <sqlite3.h>
#include <string.h>
sqlite3 *db = NULL;//数据库标识
char *errmsg = NULL;错误信息
char **resultp=NULL;存放执行sql语句后的结果
int nrow,ncolumn;//行和列
int lcj=0;//全局变量
int i;//全局变量
char sql[100];
void print_dl()//登录界面
{
	char c=' ';
	printf("\n%23c登录界面%23c",c,c);
	printf("\n===============================================================");
	printf("\n===============================================================");
	printf("  %18c用户名:%15c\n",c,c);
	printf("  %17c密码:%15c\n",c,c);
	printf("\n===============================================================");
	printf("  %15c0|登录  1|注册   2|退出%15c\n",c,c);
}
int login()//登录功能:用户输入账户密码,系统去访问用户密码数据库,搜索的到说明登录成功,反之相反,sqlite3_get_table,搜索成功行数为1,失败0
{
	char name[100];
	char password[100];
	printf("用户名:  ");
	gets(name);
	printf("\n");
	printf("密码:  ");
	gets(password);
	printf("\n");
	sprintf(sql, "select *from password where name='%s' and password=%s;",name,password);
	if(SQLITE_OK!=sqlite3_get_table(db,sql,&resultp,&nrow,&ncolumn,&errmsg)){
		printf("login:%s",errmsg);
		return -1;
	}
	if(nrow==1){
		printf("登录成功");
		lcj=1;
	}
	else if(nrow==0){
		printf("登录失败");
	}
	return 0;
}
int enroll()//注册功能:用户输入账户密码,向用户密码数据库中添加数据
{
	char name[100];
	char password[100];
	printf("请输入你要注册的用户名和密码:\n");
	printf("用户名:  ");
	gets(name);
	printf("\n");
	printf("密码:  ");
	gets(password);
	printf("\n");
	sprintf(sql, "insert into password values('%s', %s);",name,password);
	if (SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) {
		printf("注册失败\n");
		return -1;
	}
	printf("注册成功\n");
	return 0;
	
}
int quit()//退出登录
{
	printf("退出登录:\n");
	return 0;
	

}

void print()//打印学生系统界面
{	
	char c=' ';
	printf("\n%23c学生信息管理系统%23c",c,c);
	printf("\n===============================================================");
	printf("\n%25c系统功能菜单%25c",c,c);
	printf("\n===============================================================");
	printf("\n===============================================================");
	printf("  %15c|0.系统说明       1.增加学生记录|%15c\n",c,c);
	printf("-----------------------------------------------------------------");
	printf("%15c|2.浏览学生记录   3.查询学生记录|%15c\n",c,c);
	printf("-----------------------------------------------------------------");
	printf("%15c|4.删除学生记录   5.修改学生记录|%15c\n",c,c);
	printf("-----------------------------------------------------------------");
	printf("%15c|6.统计学生记录   7.退出系统    |%15c\n",c,c);
	printf("-----------------------------------------------------------------");
	printf("%15c|                                |%15c\n",c,c);
	printf("-----------------------------------------------------------------");
	
}
void help()//系统说明
{
	printf("输入相关的编号,系统将弹到对应的操作处,在此你要根据相应的语句提示进行输入,随后系统将执行你的记录!\n");
}
int add()//添加记录:用户输入记录,向学生数据库添加整段记录
{
	
	printf("请输入你要增加的记录(学号名字性别语文成绩数学成绩英语成绩,分隔  名字和性别用'')\n");
	char c[100];
	gets(c);
	sprintf(sql,"insert into student values(%s);",c);
	if (SQLITE_OK != sqlite3_exec(db,sql,NULL,NULL,&errmsg)) {
		printf("insert: %s\n", errmsg);
		return -1;
	}
	printf("添加成功!\n");
	return 0;
	
}
int display()//浏览,用户输入浏览方式,访问学生数据库并且打印需要的记录
{
	printf("浏览学生记录(输入你要的浏览的方式学号或者名次)\n");
	char c[100];
	char xh[100];
	char mc[100];
	int i, j;
	int count = 0;
	gets(c);
	if(0==strcmp(c,"学号")){
		sprintf(xh,"select *from student order by id;");
		if(SQLITE_OK!=sqlite3_get_table(db,xh,&resultp,&nrow,&ncolumn,&errmsg)){
		printf("%s\n",errmsg);
		return -1;
		}
		for (i = 0; i <= nrow; i++) {//行数
			for(j=0;j<ncolumn;j++)//列数
				printf("%-10s",resultp[count++]);//数据的位置
		printf("\n");
		}
	}
	else if(0==strcmp(c,"名次")){
		sprintf(mc,"select *,chinese+math+english as 总分 from student order by 总分 desc;");
		if(SQLITE_OK!=sqlite3_get_table(db,mc,&resultp,&nrow,&ncolumn,&errmsg)){
		printf("%s\n",errmsg);
		return -1;
		}
		for(i = 0; i <= nrow; i++) {//行数
			for(j=0;j<ncolumn;j++)//列数
				printf("%-10s",resultp[count++]);//数据的位置
		printf("\n");
		}
	}
	return 0;
}
int select()//用户输入查询方式,访问学生数据库并且打印需要的记录
{	
	char xh[100];
	char mz[100];
	int i, j;
	int count = 0;
	printf("搜寻学生记录(请输入你要搜寻学号还是名字)\n");
	char c[100];
	gets(c);
	if(0==strcmp(c,"名字")){
		printf("请输入你要搜寻的名字\n");
		gets(mz);
		sprintf(sql,"select *from student where name='%s'",mz);
		if(SQLITE_OK!=sqlite3_get_table(db,sql,&resultp,&nrow,&ncolumn,&errmsg)){
		printf("%s\n",errmsg);
		return -1;
		}
		for (i = 0; i <= nrow; i++) {//行数
			for(j=0;j<ncolumn;j++)//列数
				printf("%-10s",resultp[count++]);//数据的位置
		printf("\n");
		}
	}
	else if(0==strcmp(c,"学号")){
		printf("请输入你要搜寻的学号\n");
		gets(xh);
		sprintf(sql,"select *from student where id=%s;",xh);
		if(SQLITE_OK!=sqlite3_get_table(db,sql,&resultp,&nrow,&ncolumn,&errmsg)){
		printf("%s\n",errmsg);
		return -1;
		}
		for(i = 0; i <= nrow; i++) {//行数
			for(j=0;j<ncolumn;j++)//列数
				printf("%-10s",resultp[count++]);//数据的位置
		printf("\n");
		}
	}
	return 0;
}
int delete()//删除学生记录:输入记录,访问数据库删除这条记录
{
	int i, j;
	int count = 0;
	printf("请输入你要删除的学生记录(输入学生的学号))\n");
	char xh[100];
	gets(xh);
	sprintf(sql,"delete from student where id=%s;",xh);
		if(SQLITE_OK!=sqlite3_get_table(db,sql,&resultp,&nrow,&ncolumn,&errmsg)){
		printf("%s\n",errmsg);
		return -1;
		}
	printf("删除成功!");
	return 0;
	


}
int alter()//修改学生记录:输入修改记录,访问数据库进行修改
{
	printf("修改学生记录(请输入你要修改基本信息(学号、姓名、性别)还是成绩信息(语文、数学、英语))\n");
	char jb[100];
	char cj[100];
	char a[100];
	char b[100];
	char c[100];
	char e[100];
	int i, j;
	int count = 0;
	char d[100];
	gets(d);
	if(0==strcmp(d,"基本信息")){
		printf("请输入你要修改学生的学号");
		gets(e);
		printf("请输入学号\n");
		gets(a);
		printf("请输入姓名\n");
		gets(b);
		printf("请输入性别\n");
		gets(c);
		sprintf(sql,"update student set id=%s,name='%s',sex='%s' where id=%s;",a,b,c,e);
		if(SQLITE_OK!=sqlite3_get_table(db,sql,&resultp,&nrow,&ncolumn,&errmsg)){
		printf("%s\n",errmsg);
		return -1;
		}
	}
	else if(0==strcmp(d,"成绩信息")){
		printf("请输入你要修改学生的学号");
		gets(e);
		
		printf("请输入语文成绩\n");
		gets(a);
		printf("请输入数学成绩\n");
		gets(b);
		printf("请输入英语成绩\n");
		gets(c);
		sprintf(sql,"update student set chinese=%s,math=%s,english=%s where id=%s;",a,b,c,e);
		if(SQLITE_OK!=sqlite3_get_table(db,sql,&resultp,&nrow,&ncolumn,&errmsg)){
		printf("%s\n",errmsg);
		return -1;
		}
	}
	printf("修改成功!");
	return 0;
}
int avg()//统计记录,输入你要统计什么,访问学生数据库并且打印
{
	char zf[100];
	char avg[100];
	char minandmax[100];
	char math[100];
	char english[100];
	int i, j,z;
	int count = 0;
	printf("统计学生记录(请输入你要统计什么(总分,平均分,最大值和最小值,分段)\n");
	char c[100];
	gets(c);
	if(0==strcmp(c,"总分")){
		sprintf(zf,"select *,chinese+math+english as 总分 from student;");
		if(SQLITE_OK!=sqlite3_get_table(db,zf,&resultp,&nrow,&ncolumn,&errmsg)){
		printf("%s\n",errmsg);
		return -1;
		}
		for (i = 0; i <= nrow; i++) {//行数
			for(j=0;j<ncolumn;j++)//列数
				printf("%-10s",resultp[count++]);//数据的位置
		printf("\n");
		}
	}
	else if(0==strcmp(c,"平均分")){
		sprintf(avg,"select avg(chinese),avg(math),avg(english) from student;");
		if(SQLITE_OK!=sqlite3_get_table(db,avg,&resultp,&nrow,&ncolumn,&errmsg)){
		printf("%s\n",errmsg);
		return -1;
		}
		for(i = 0; i <= nrow; i++) {//行数
			for(j=0;j<ncolumn;j++)//列数
				printf("%-10s",resultp[count++]);//数据的位置
		printf("\n");
		}
	}
	else if(0==strcmp(c,"最大值和最小值")){
		sprintf(minandmax,"select min(chinese), max(chinese),min(math),max(math),min(english),max(english) from student;");
		if(SQLITE_OK!=sqlite3_get_table(db,minandmax,&resultp,&nrow,&ncolumn,&errmsg)){
		printf("%s\n",errmsg);
		return -1;
		}
		for(i = 0; i <= nrow; i++) {//行数
			for(j=0;j<ncolumn;j++)//列数
				printf("%-10s",resultp[count++]);//数据的位置
		printf("\n");
		}
	}
	else if(0==strcmp(c,"分段")){
		char a[100];
		char b[100];
		char km[100];
		printf("输入分段前区间");
		gets(a);
		printf("输入分段后区间");
		gets(b);
		printf("请输入科目");
		gets(km);
		if(0==strcmp(km,"语文")){
			sprintf(sql,"select count(chinese) as 语文人数 from student where chinese>=%s and chinese <=%s;",a,b);
			if(SQLITE_OK!=sqlite3_get_table(db,sql,&resultp,&nrow,&ncolumn,&errmsg)){
			printf("%s\n",errmsg);
			return -1;
			}
			for(i = 0; i <= nrow; i++) {//行数
				for(j=0;j<ncolumn;j++)//列数
					printf("%-10s",resultp[count++]);//数据的位置
			printf("\n");
			}
		}
		else if(0==strcmp(km,"数学")){
			sprintf(math,"select count(math) from student as 数学人数 where math>=%s and math<=%s;",a,b);
			if(SQLITE_OK!=sqlite3_get_table(db,math,&resultp,&nrow,&ncolumn,&errmsg)){
			printf("%s\n",errmsg);
			return -1;
			}
			for(i = 0; i <= nrow; i++) {//行数
				for(j=0;j<ncolumn;j++)//列数
					printf("%-10s",resultp[count++]);//数据的位置
			printf("\n");
			}
		}
		else if(0==strcmp(km,"英语")){
			sprintf(english,"select count(english) as 英语人数 from student where english>=%s and english<=%s;",a,b);
			if(SQLITE_OK!=sqlite3_get_table(db,english,&resultp,&nrow,&ncolumn,&errmsg)){
				printf("%s\n",errmsg);
				return -1;
				}
			for(i = 0; i <= nrow; i++) {//行数
				for(j=0;j<ncolumn;j++)//列数
					printf("%-10s",resultp[count++]);//数据的位置
			printf("\n");
			}
		}
	}
	return 0;
}
void out()
{
	printf("系统退出\n");
}
int main()//主框架
{

	if (SQLITE_OK != sqlite3_open("my.db", &db)) {   //打开数据库
		printf("Sqlite open failed!\n");
		return -1;
	}
	printf("Sqlite open success!\n");
	if(SQLITE_OK!=sqlite3_exec(db,"create table if not exists password(name text primary key,password integer);", NULL, NULL, &errmsg)){
		printf("creat: %s\n", errmsg);
		return -1;
	}//创建用户密码数据库
	if(SQLITE_OK!=sqlite3_exec(db,"create table if not exists student(id integer primary key,name text,sex text,chinese integer,math integer,english integer);", NULL, NULL, &errmsg)){
		printf("creat: %s\n", errmsg);
		return -1;	
	}//创建学生数据库(学号,名字,性别,语文成绩,数学成绩,英语成绩)
	print_dl();//打印登录界面
	while(1){
		printf("请输入对应的编号:\n");
		scanf("%d",&i);
		getchar();
		switch(i){
			case 0:login();break;
			case 1:enroll();break;
			case 2:quit();break;
		}
		if(i==2)//登录退出
			break;
		if(lcj==1){//登录成功
			print();//打印学生系统管理界面
			while(1){
				printf("请输入菜单编号:\n");
				scanf("%d",&i);
				getchar();
				switch(i){
					case 0:help();continue;
					case 1:add();continue;
					case 2:display();continue;
					case 3:select();continue;
					case 4:delete();continue;
					case 5:alter();continue;
					case 6:avg();continue;
					case 7:out();break;
					default:printf("请在0-7选择!\n");
				}
				if(i==7)
					break;
			}
			break;
		}
		else//登录失败
			continue;
	}
	sqlite3_close(db);
	return 0;
}

主体框架

while(1){
		printf("请输入对应的编号:\n");
		scanf("%d",&i);
		getchar();
		switch(i){
			case 0:login();break;
			case 1:enroll();break;
			case 2:quit();break;
		}
		if(i==2)//登录退出
			break;
		if(lcj==1){//登录成功
			print();//打印学生系统管理界面
			while(1){
				printf("请输入菜单编号:\n");
				scanf("%d",&i);
				getchar();
				switch(i){
					case 0:help();continue;
					case 1:add();continue;
					case 2:display();continue;
					case 3:select();continue;
					case 4:delete();continue;
					case 5:alter();continue;
					case 6:avg();continue;
					case 7:out();break;
					default:printf("请在0-7选择!\n");
				}
				if(i==7)
					break;
			}
			break;
		}
		else//登录失败
			continue;
	}

使用两个while循环,第一个while实现不断的登录,注册,满足条件跳出循环,登录失败退出整体循环,登录成功跳转到第二个while,第二个while实现不断执行学生管理系统的功能,满足条件退出。再在两个while里面使用switch case 语句,输入相关编号方便去调用相关函数

将c语言代码和数据库连接起来

在c编程中使用sqlite3语句访问数据库,用户输入相关指令,用字符串相关处理方法构建sql语句,使用sqlite3函数访问数据库,完成目的

字符串的相关处理方法

引用头部文件<string.h>,此次编程将使用到利用数组输入字符串,字符串比较strcmp,创建自定义字符串sprintf

利用数组输入字符串

char c[100];
gets(c)//输入字符串

字符串比较strcmp

strcmp(a,b)
a,b为字符串,结果将返回3个值

返 回 值 意 义
<0               第一个字符串小于第二个字符串
 0               两个字符串相等    ·
>0               第一个字符串大于第二个字符串
strcmp(a,b)//a和b为两个字符串

创建自定义字符串sprintf

sprintf(str," ",x)
str:你要构建出来的字符串
" ":在这里自定义字符串可添加%s调用后面参数x
x:字符串

char english[100];
char a[100];
char b[100];
printf("输入分段前区间");
gets(a);
printf("输入分段后区间");
gets(b);
sprintf(english,"select count(english) as 英语人数 from student where english>=%s and english<=%s;",a,b);

具体参照主代码,注释都有

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值