学生信息管理系统c代码Word格式.docx
《学生信息管理系统c代码Word格式.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统c代码Word格式.docx(24页珍藏版)》请在冰点文库上搜索。
提示用户如何操作,指令如下:
printf("
欢迎进入========学员信息管理系统========\n"
);
\n\t\t\t按任意键初始化学员信息...\n\n"
第二种界面:
返回程序运算的结果,会在后面“算法”中介绍。
1.2、如何实现主目录界面?
system("
cls"
以下是程序主目录,请选择功能\n\n"
1)显示\n2)查找\n3)录入\n4)修改\n5)删除\n6)排序\n0)退出\n\n"
键入功能前的数字后,按\"
Enter\"
键:
"
图14
1.3、如何实现“键入功能前的数字后”,就能选择相应的命令?
do
{select=getchar();
switch(select)
{case'
1'
:
display();
break;
//显示所有学员信息
case‘2’:
query();
//查询学员信息
case'
3'
input();
break;
//录入新学员信息
4'
update();
//修改学员信息
case'
5'
del();
//删除学员信息
6'
sort();
//对学员进行排序
0'
//退出
default:
请选择功能前的数字\n"
break;
}
}while(select!
='
说明:
“select=getchar()”中,select代表输入的数字字符;
用switch-case语句实现选择对应的命令;
“display()”函数实现“显示所有学员信息”;
“
1.4、如何实现“按任意键回到主目录”?
\n\n\t\t\t按任意键进入主目录..."
getch();
//从键盘收任一个字符即返回,该函数在conio.h中
1.5、如何实现图15中“输出格式化”?
图15
\n%-8s%-10s%-10s%-10s%-10s\n"
"
学号"
姓名"
语文"
数学"
英语"
%-8s%-10s%-10s%-10s%-10s\n"
"
===="
=="
=="
%-8s%-10s%-10.1f%-10.1f%-10.1f"
“001”,“li1”,68,87,63);
“001”,“Li2”,68,78,74);
在在printf中,“-”表示数据左对齐,“10.1”中的10表示输出宽度,“.1”表示输出1位小数。
2、数据结构的设计
2.1、如何表示学生信息的数据类型
在本项目中,学生信息包括“学号、姓名、三门课的成绩”可以用结构体数据类型来表示:
typedefstruct//定义学生信息结构体类型
{charno[10];
//学号
charname[16];
//姓名
floatscore[3];
//定义成绩数组
}STU;
2.2、关于文件包含
在项目中用到了很多库函数,因此在程序起始位置,需要用到文件包含:
#include"
stdio.h"
stdlib.h"
string.h"
conio.h"
2.3、关于“全局变量”
由于程序中用到大量的函数,因此可以设置全局变量。
intscount;
//定义数据库实际学生数量
STUstu[10000];
//声明代表学生的结构体数组,假设最多有10000条数据
2.4、关于“函数声明”
程序中用到大量的自定义函数,它们可能是主调函数,也可能是被调函数,为了扩展它们的作用域,最好在程序前面加上函数声明。
//函数声明部分
voidreaddb();
//初始化学员信息,把外存中学生数据读入到内存中
voidsavedb();
//把内存中结构体数组中的学生数据保存到外存中
voidzhumulu();
//显示程序主目录
voiddisplay();
//显示所有学员信息
voidinput();
//录入新学员信息
intfind(charstr[80]);
//查找指定学号的学员,若找到返回该学员在数组中的下标,若没找到返回-1,str代表指定学号;
在多个模块中用到该函数
voidquery();
//根据学号查找,并显示学员信息
voidupdate();
//修改学员信息
voiddel();
//删除学员信息
voidsort();
//对学员进行排序
2.5、关于“数据文件”
图16
上面显示的是所有学生信息,这些学生数据在内存中的表现形式是常量、变量、数组和链表的方式,在外存中的表现形式是文件。
由于断电后,内存信息会全部清空,因此,内存信息需要经常存放到外存中。
2.5.1、文件操作的步骤
(1)打开文件:
fopen
(2)对文件读写操作:
fscanf、fprintf
(3)关闭文件:
fclose
2.5.2、从外存文件中读数据至内存数组stu
FILE*fp=fopen(“studb.txt”,"
r”);
i=0;
//i是数据库中实际学生数量,其全局变量scount
while(!
feof(fp))//stu是代表学生的结构体数组
{fscanf(fp,"
%s%s%f%f%f"
stu[i].no,stu[i].name,//no学号,name姓名
&
stu[i].score[0],&
stu[i].score[1],&
stu[i].score[2]);
i++;
//score是三门课成绩的数组
}
scount=i;
fclose(fp);
2.5.3、把内存数组中数据输出到外存文件
FILE*fp=fopen(“studb.txt”,“w”);
For(i=0;
i<
scount;
i++)
{fprintf(fp,"
%-8s%-10s%-10.1f%-10.1f%-10.1f\n"
stu[i].no,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}//”%-10.1f”中,“-”左对齐,“10”宽度,“.1”小数位数
3、主要算法的实现
3.1、显示所有学员的信息(如图17)
图17
方法:
遍历数组,用printf函数显示数据。
for(i=0;
printf(“%-8s%-10s%-10.1f%-10.1f%-10.1f\n”,
stu[i].no,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
其中,scount是“实际学生数量”;
stu“代表学生信息的结构体数组”,no“学号”,name“姓名”,score“三门课成绩的数组”。
3.2、查找指定学号
遍历数组,查找指定学号的学员,函数返回值是找到后的学号的下标,如果指定学号不存在,返回-1;
intfind(charstr[80])//str代表要查找的学号
{inti;
for(i=0;
i++)//scount代表实际的学生数量
if(strcmp(str,stu[i].no)==0)returni;
//stu是表示学生信息的结构体数组名
return-1;
3.3、插入新的学员信息
图18
(1)依次输入新学员信息,并赋值给新变量s;
(2)把s添加到数组中;
(3)把内存数据保存至外存。
voidinput()//录入新学员信息
{STUs;
//代表新学员信息
//下面输入新学员信息
printf("
\n\n\n请输入\"
学号\"
,\"
不允许为空字符串:
scanf("
%s"
&
s.no);
\n请输入\"
姓名\"
注意\"
里不能加空格:
s.name);
语文成绩\"
:
%f"
s.score[0]);
数学成绩\"
s.score[1]);
英语成绩\"
s.score[2]);
//把s添加到结构体数组中;
同时把表示学员数量的变量scount增加1
stu[scount++]=s;
savedb();
//savedb函数把内存中结构体数组中的学生数据保存到外存中
3.4、修改学员信息
(1)查找到指定学员的数组下标n;
(2)输入修改后的学员信息,存贮到临时变量s中;
(3)把s临时变量赋值给stu[n],即stu[n]=s;
(4)保存数据到外存文件。
voidupdate()//修改学员信息
{intn;
charstr[80];
STUs;
//s作为临时变量,临时存放修改后的学生信息
\n请输入要修改的学生的学号:
str);
n=find(str);
//find函数返回要查找的学号的下标
\n\n\n请输入修改后的\"
scanf("
\n请输入修改后的\"
姓名里\"
不能加空格:
stu[n]=s;
//把修改后的值保存到内存数组中
savedb();
//把内存数据保存到外存数据文件中
3.5、删除某学员信息
(2)把后续数据前移,实现删除操作;
(3)保存数据到外存文件。
voiddel()//删除学员信息
{intn,i;
charch;
\n请输入要删除的学生的学号:
for(i=n;
=scount-2;
i++)stu[i]=stu[i+1];
//删除指定学号
scount--;
3.6、对学员排序
下面是升序排序:
for(i=0;
for(j=i+1;
j<
=scount-1;
j++)
if(strcmp(stu[i].no,stu[j].no)>
0)
{t=stu[i];
stu[i]=stu[j];
stu[j]=t;
三、对本项目的拓展
1、本程序是用结构体数组实现,您可以用结构体链表来实现所有的算法;
2、结构体的成员发生改变,本结构体成员有:
学号、姓名、三门课成绩。
您可以增加成员,如性别、年龄、或更多门课的成绩;
3、把系统改为“教师信息管理系统”、“档案信息管理系统”、“订单管理系统”等。
四、附完整的程序代码
//========学员信息管理系统========
//==TXT文本文件实时存储数据,运用结构体数组
typedefstruct//定义学生信息结构体类型
//学号
//姓名
//定义成绩数组
//声明结构体数组,假设最多10000条信息
voidreaddb();
//初始化学员信息,把外存中学生数据读入到内存中
voidsavedb();
//把内存中结构体数组中的学生数据保存到外存中
voidzhumulu();
//显示程序主目录
voiddisplay();
//显示所有学员信息
voidinput();
//录入新学员信息
//查找指定学号的学员,找到返回该学员在数组中的下标,没找到返回-1,str代表指定学号;
在多个模块中用到该函数
voidquery();
//根据学号查找,并显示学员信息
voidupdate();
//修改学员信息
voiddel();
//删除学员信息
voidsort();
//对学员进行排序
//函数定义
voidmain()
{//程序进入“欢迎界面”
\n\n\n\n\n\t\t欢迎进入========学员信息管理系统========\n"
//按任意键初始化学员信息
getch();
//从键盘收任一个字符即返回,该函数在conio.h中
readdb();
//初始化学员信息,把外存中学生数据读入到内存中
\t\t\t共有%d条学员信息"
scount);
//scount是实际学生数量
zhumulu();
//调出“程序主目录”
//显示和返回到程序主目录
voidzhumulu()
{charselect;
//代表用户所选择的子目录号
do
{system("
printf("
========学员信息管理系统========\n\n"
select=getchar();
switch(select)
{
case'
system("
display();
//显示完毕,提示用户返回主程序
break;
2'
query();
//查询学员信息
input();
update();
del();
//删除学员信息
sort();
//退出
default:
}
}while(select!
voidreaddb()//初始化学员信息,把外存中学生数据读入到内存中
{
FILE*fp;
if((fp=fopen("
studb.txt"
r"
))==NULL)
{printf("
文件有错误!
!
程序不能运行!
\n"
return;
}
scount=0;
//scount是数据库中实际学生数量,是全局变量
while(!
feof(fp))//no是学号,name是姓名,)core是成绩
{//stu是学生结构体数组,全局变量
fscanf(fp,"
stu[scount].no,stu[scount].name,
&
stu[scount].score[0],&
stu[scount].score[1],&
stu[scount].score[2]);
if(strcmp(stu[scount].no,"
)!
=0)scount++;
//去掉学号为空字符串
fclose(fp);
//把内存中结构体数组中的学生数据保存到外存中
voidsavedb()
w"
))==NULL)//以写的方式打开文件,覆盖原文件
//stu是学生结构体数组,全局变量
i++)//scount代表实际的学生数量
if(strcmp(stu[i].no,"
=0)//去掉学号为空字符串的信息
fprintf(fp,"
stu[i].no,stu[i].name,
stu[i].score[0],stu[i].score[1],stu[i].score[2]);
voiddisplay()//显示所有学员信息
===="
===="
//“-”表示数据左对齐,“10.1”中的10表示宽度,“.1”表示1位小数
//find查找指定学号的学员,代表指定学号(str)的下标,如果指定学号不存在,返回-1;
intfind(charstr[80])
//stu是表示学生信息的结构体数组名
i++)//scount代表实际的学生数量,
voidquery()//根据学号查找,并显示学员信息
charstr[80];
intn;
system("
\n请输入要查询的学生的学号:
if(n==-1)
\n对不起,您要查找的学员不存在\n"
else
==="
stu[n].no,stu[n].name,
stu[n].score[0],stu[n].score[1],stu[n].score[2]);
//显示完毕,提示用户返回主程序
voidinput()//录入新学员信息
inti;
//先显示已有学员信息
当前学员信息如下:
)