学生信息管理系统c代码Word格式.docx

上传人:b****2 文档编号:5733630 上传时间:2023-05-05 格式:DOCX 页数:24 大小:564.59KB
下载 相关 举报
学生信息管理系统c代码Word格式.docx_第1页
第1页 / 共24页
学生信息管理系统c代码Word格式.docx_第2页
第2页 / 共24页
学生信息管理系统c代码Word格式.docx_第3页
第3页 / 共24页
学生信息管理系统c代码Word格式.docx_第4页
第4页 / 共24页
学生信息管理系统c代码Word格式.docx_第5页
第5页 / 共24页
学生信息管理系统c代码Word格式.docx_第6页
第6页 / 共24页
学生信息管理系统c代码Word格式.docx_第7页
第7页 / 共24页
学生信息管理系统c代码Word格式.docx_第8页
第8页 / 共24页
学生信息管理系统c代码Word格式.docx_第9页
第9页 / 共24页
学生信息管理系统c代码Word格式.docx_第10页
第10页 / 共24页
学生信息管理系统c代码Word格式.docx_第11页
第11页 / 共24页
学生信息管理系统c代码Word格式.docx_第12页
第12页 / 共24页
学生信息管理系统c代码Word格式.docx_第13页
第13页 / 共24页
学生信息管理系统c代码Word格式.docx_第14页
第14页 / 共24页
学生信息管理系统c代码Word格式.docx_第15页
第15页 / 共24页
学生信息管理系统c代码Word格式.docx_第16页
第16页 / 共24页
学生信息管理系统c代码Word格式.docx_第17页
第17页 / 共24页
学生信息管理系统c代码Word格式.docx_第18页
第18页 / 共24页
学生信息管理系统c代码Word格式.docx_第19页
第19页 / 共24页
学生信息管理系统c代码Word格式.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

学生信息管理系统c代码Word格式.docx

《学生信息管理系统c代码Word格式.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统c代码Word格式.docx(24页珍藏版)》请在冰点文库上搜索。

学生信息管理系统c代码Word格式.docx

提示用户如何操作,指令如下:

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;

//先显示已有学员信息

当前学员信息如下:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2