首先在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。。。。
希望这些对你有所帮助。。。。
首先,数据库只是存放数据的,像你说的学生成绩管理系统分四大模块,还有具体功能实现,这些跟数据库没关系,或者说这不是数据库能干的事,你需要相应的程序页面来实现,数据库是存储数据和配合程序 *** 作数据的。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)