如何用SQL建立一个学生成绩管理系统数据库?

如何用SQL建立一个学生成绩管理系统数据库?,第1张

首先在SQL中利用企业管理器或向导建立一个数据库,命名为学生管理系统,

启动SQL Sever服务,运行企业管理器,单击要创建数据库的服务器左边的加号图标,展开树形目录,在“数据库”节点上右击鼠标,在d出的快捷菜单中选则“新建数据库”命令,然后按照提示一步步建立数据库,不再详细叙述。

假设学生管理系统下有三个表,分别为学生表、课程表、修课表,表的结构分别如下:

学生表(student) (

学号(sno) 普通编码定长字符类型,长度7,主码,

姓名(sname) 普通编码定长字符类型,长度8,非空,

性别(ssex) 统一编码定长字符类型,长度1,

年龄(sage) 微整型,

所在系(sdept) 统一编码可变长字符类型,长度20

课程表(course) (

课程号(cno) 普通编码定长字符类型,长度6,主码,

课程名(cname) 统一编码定长字符类型,长度10,非空,

学分(credit) 小整型,

学期(semester) 小整型

修课表(sc)(

学号(sno) 普通编码定长字符类型,长度7,主码,外码

课程号(cno) 普通编码定长字符类型,长度6,主码,外码

成绩(grade) 小整型,

修课类别(type)普通编码定长字符类型,长度4

则创建表的语句分别为:

create table Student(

Sno char(7) primary key,

Sname char(8) not null,

Ssex nchar(1),

Sage tinyint,

Sdept nvarchar(20)

)

create table Course(

Cno char(6) primary key,

Cname nchar(10) not null,

Credit smallint,

Semester smallint

)

create table SC(

Sno char(7),

Cno char(6),

Grade smallint,

Type char(4),

primary key(Sno,Cno),

Foreign key(Sno)    References Student (Sno),

Foreign key(Cno)    References Course (Cno)

)

各表的结构大体如此,如有变化可自行修改。 以上数据库和表就基本建立好了,然后就可以通过数据导入或SQL语句等向数据库中添加学生的各项具体数据了。

SQL语言,是结构化查询语言(Structured Query Language)的简称。SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

还真不想再写代码了啊。。。。。

直接跟你说下思路吧。。。。

首先创建一个结构体,如——

struct student

{

char num[10] //学号

char name[20] //姓名

char sex[4]//性别

int age //年龄

int flag //一个标示符(下面会说用法)

}

然后就定义一个student类型的数组stu[max],在前面#define max 1000000,你也可以把max定义得小一点,这是用来表示最大能容纳多少个学生信息。。。。

说到flag的用处,我不清楚你了不了解,还是先跟你说下吧。。。。

先考一下你,知道怎样把一个数组里面的某一个元素清空吗?清空就表示能在那个位置再次赋值,没清空的位置就不能重复赋值。把那个元素设为a[x],可能你会想着把a[x]=0不就得啦,那好,如果用这种方法,那么如果你想寻找数组a中可以再次赋值的元素,然后进行赋值,你是不是要通过一个判别式来对数组a的每一个元素进行判断,看看它是否能被再赋值,对吧,那这个判别式肯定就是判断a中的数值是否为零了。但是你想一下,如果一开始a中某个元素的值就是等于0,并不表示清空状态,那你这样的判别式能成立吗,所以我们要用到一个标示符flag。。。。

当flag=1时,表示该数组的元素已存在,当flag=0时,表示该数组的元素是无效的,这样的话就不需要对数组中的每个元素进行什么清空 *** 作了,就像上面的数组stu,这么多元素,你怎么清空。。。。

然后有一个最重要的是怎样存储数据,因为没用到数据库,所以就用txt文件来存储吧,给你一个相关的代码——

int load_student() //把已存在的储存数据的txt文件打开

{

FILE *fp

if((fp=fopen("student.txt","rb"))==NULL) //判断文件是否存在

{

printf("不能打开此文件.\n")

exit(0)

}

for(int i=0i<SIZEi++)//存在的话就打开它

{

fread(&stu[i],sizeof(struct student),1,fp)

}

fclose(fp)

return 0

}

int save_student() //把数据存放进txt文件中

{

FILE *fp

if((fp=fopen("student.txt","wb"))==NULL)

{

printf("不能打开此文件.\n")

exit(0)

}

for(int i=0i<SIZEi++)

{

fwrite(&stu[i],sizeof(struct student),1,fp)

}

fclose(fp)

return 0

}

这是一个比较基本的代码,你可以灵活的修改一下,实现读写过程的代码也就是这样了。。。。

然后是功能的实现,这方面就得看你的要求了,不过我建议你把每个界面做成一个函数,实现模块化,如——

int shouye() //首页

{

system("cls") //清屏

int num1

printf("**********************************\n")

printf(" 学生信息管理系统 \n")

printf("**********************************\n")

printf("\n\n")

printf("1、更改学生信息\n\n")

printf("2、查看学生信息\n\n")

printf("3、退出系统\n\n")

scanf("%d",&num1) //输入 *** 作

if(num1==1)

update()//进入学生信息更改模块

else if(num1==2)

check() //进入学生信息查看模块

else

exit(0) //退出系统

return 0

}

在给多你一个界面函数的代码吧——

int update()

{

system("cls")

int num2

printf("**********************************\n")

printf(" 更改成绩 \n")

printf("**********************************\n")

printf("\n\n")

printf("1、增加学生信息\n\n")

printf("2、修改学生信息\n\n")

printf("3、返回上一层\n\n")

scanf("%d",&num2)

if(num2==1)

add()

else if(num2==2)

correct()

else

shouye()

return 0

}

大概就是这种模式,我就不多弄了,你自己开拓一下吧,可能你会问我主函数怎么实现,大概就是这样吧——

int main()

{

load_student() //读取txt里面的内容

shouye()

return 0

}

这里要说明一下,我给你这代码还不怎么完善的,只是简单跟你说下思路罢了,如果你招着复制的话,要记住,在你第一次运行之前,要先在你这工程目录低下创建一个名字为student的txt文件,不然会显示错误,因为load_student()那里就会判断是否存在student.txt文件,没的话就会显示错误的。。。。

我建议你简单地画下流程图,这样可以让你的编程思路更清晰,如果还有什么不清楚的地方可以Q我,410430209。。。。

希望这些对你有所帮助。。。。

首先,数据库只是存放数据的,像你说的学生成绩管理系统分四大模块,还有具体功能实现,这些跟数据库没关系,或者说这不是数据库能干的事,你需要相应的程序页面来实现,数据库是存储数据和配合程序 *** 作数据的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9621780.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存