如何制作一个数据库学生管理系统

2021-11-04 教育 172阅读
还真不想再写代码了啊。。。。。

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

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

structstudent
{
charnum[10];//学号
charname[20];//姓名
charsex[4];//性别
intage;//年龄
intflag;//一个标示符(下面会说用法)
};

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

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

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

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

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

intload_student()//把已存在的储存数据的txt文件打开
{
FILE*fp;
if((fp=fopen("student.txt","rb"))==NULL)//判断文件是否存在
{
printf("不能打开此文件.\n");
exit(0);
}
for(inti=0;i{
fread(&stu[i],sizeof(structstudent),1,fp);
}
fclose(fp);
return0;
}

intsave_student()//把数据存放进txt文件中
{
FILE*fp;
if((fp=fopen("student.txt","wb"))==NULL)
{
printf("不能打开此文件.\n");
exit(0);
}
for(inti=0;i{
fwrite(&stu[i],sizeof(structstudent),1,fp);
}
fclose(fp);
return0;
}

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

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

intshouye()//首页
{
system("cls");//清屏
intnum1;
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();//进入学生信息更改模块
elseif(num1==2)
check();//进入学生信息查看模块
else
exit(0);//退出系统
return0;
}

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

intupdate()
{
system("cls");
intnum2;
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();
elseif(num2==2)
correct();
else
shouye();
return0;
}

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

intmain()
{
load_student();//读取txt里面的内容
shouye();
return0;
}

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

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

希望这些对你有所帮助。。。。
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com