
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语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
create database [数据库名]\x0d\x0auser [该数据库名]\x0d\x0a\x0d\x0a--学生表\x0d\x0acreate table [学生表表名](\x0d\x0asId int primary key, --学生ID编号,主键\x0d\x0asName varchar(10) unique not null, --学生名字\x0d\x0a)\x0d\x0a\x0d\x0a--科目表\x0d\x0acreate table [科目表表名](\x0d\x0asjId int primary key, --科目ID编号,主键\x0d\x0asjName varchar(10) unique not null, --科目名称\x0d\x0a)\x0d\x0a\x0d\x0a--成绩表\x0d\x0acreate table [成绩表表名]\x0d\x0arId int primary key, --成绩ID编号,主键\x0d\x0asjId int references [科目表表名](sjId), --科目ID编号,继承科目表的ID编号\x0d\x0asId int references [学生表表名](sId), --学生ID编号,继承学生表的ID编号\x0d\x0aresult float not null --成绩\x0d\x0a)\x0d\x0a\x0d\x0a--查询语句\x0d\x0aselect r.rId,sj.sjId,sj.sjName,su.sId,su.sName,r.result \x0d\x0afrom [成绩表表名] r,\x0d\x0ajoin [科目表表名] sj on sj.sjId=r.sjId,\x0d\x0ajoin [学生表表名] su on su.sId=r.sId还真不想再写代码了啊。。。。。直接跟你说下思路吧。。。。
首先创建一个结构体,如——
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条)