本文主要介绍了使用C语言实现的学生成绩管理系统。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
最近在学C语言,开发了一个学生成绩管理系统的小程序。代码比较粗糙,不喷了。
上图:
整个程序使用链表管理学生成绩,使用文件处理函数保存学生成绩。Fopen(文件路径,“WB”)用于将内存中学生信息的数据直接写入文件,Fopen(文件路径,“Rb”)用于读取程序后将数据再次直接恢复到内存中。
选项6是手动保存链表数据和配置数据。
选项7配置链表中的数据是否需要在每次修改时自动保存。
00:选项1进入后,直接根据提示输入学生的所有信息,每行一个。
选项3修改学生信息。进入后,选择如何找到要修改的学生,然后输入该学生的学号或姓名。找到后(因为可能有重名的学生,这里做了序号索引),输入结果索引,然后根据提示重新输入学生信息,达到修改的效果。
选项4查询,功能如上图所示。
选项5排序,根据提示输入条件,排序会导致链表数据的变化,所以返回主菜单后数据会自动保存到文件中。
选项8投票系统,在链表中输入人名,下面的投票结果会实时变化并排序,以票数最高的人的颜色高亮显示。
选项9输入后,右侧出现“导出成功”的提示,那么对应的目录下就会出现文件student_export.txt,里面包含了链表中学生的所有信息。这里使用fprintf函数输出到文件。
在对链表排序时,数据交换使用kernel32.dll的内存数据复制MoveMemory函数,只需要复制和交换链表中除pNext以外的数据。
以下代码:
//student management system.cpp:定义控制台应用程序的入口点。
//
#include 'stdafx.h '
#include 'string.h '
#包含“conio.h”
#包含“windows.h”
#include 'stdlib.h '
#define LIST_TITLE '学号姓名性别中文数学英语\n '
#define LIST_TITLE_1 '学号,姓名,性别,语文,数学,英语平均分\n '
# define FILE _ DATABASE ' C:\ \ student _ DATABASE . dat '
# define FILE _ EXPORT ' C:\ \ student _ EXPORT . txt '
//颜色
列举型别
{
黑色,
蓝色,
绿色,
青色,
红色,
洋红色,
棕色,
浅灰色,
深灰色,
浅蓝色,
浅绿色,
淡青色,
浅红色,
浅洋红色,
黄色,
白色
};
//函数索引
列举型别
{
Fun _ add=1,//添加学生信息
C _ delete,//删除
C _ modify,//修改
Fun _ search,//搜索
C _ sort,//排序
C _ save,//保存
Func_AutoSave,//自动保存
FUN _ VOTE,//投票系统
Func_Export,//导出学生信息
func _ Exit system///退出系统
};
结构学生
{
int num//学生ID
char name[20];//名称
char sex[8];//性别
浮动分数[3];//三门课程的成绩
浮动平均值;//平均分
int计数;//投票计数
学生* pNext
};
学生* G _ pStuHead//链接列表头
bool G _ autoStore=false//自动保存
/************************************************************************/
/*设置字体颜色*/
/************************************************************************/
void setFontColor(int ForgC)
{
WORD wColor
HANDLE hout put=GetStdHandle(STD _ OUTPUT _ HANDLE);
控制台_屏幕_缓冲区_信息csbi
if(GetConsoleScreenBufferInfo(hout put,csbi))
{
//设置字体颜色
wColor=(csbi . wattributes0xf 0)(ForgC0x0F);
SetConsoleTextAttribute(hout put,w color);
}
}
/************************************************************************/
/*光标跳转到指定位置*/
/************************************************************************/
void gotoxy(int x,int y)
{
//更新光标位置
坐标位置;
HANDLE hout put=GetStdHandle(STD _ OUTPUT _ HANDLE);
位置。X=x
位置。Y=y
SetConsoleCursorPosition(hout put,pos);
//隐藏光标
//控制台_光标_信息游标;
//光标。b可见=假;
//光标。dwsize=1;//值介于1 ~ 100 之间单元格底部为下划线~完全填充单元格
//SetConsoleCursorInfo(hOutput,cursor);
}
/************************************************************************/
/*主菜单中指定位置打印是否自动保存*/
/************************************************************************/
void printAutoStoreInfo()
{
setFontColor(浅绿色);
gotoxy(13,10);
printf('%s\n ',G_autoStore?'是' : '否');
setFontColor(白色);
}
/************************************************************************/
/*显示最上面的系统标题*/
/************************************************************************/
void showSystemTitle()
{
setFontColor(浅绿色);
printf('-\ n ');
printf('\t\t欢迎进入学生管理系统\ n’);
printf('-\ n ');
setFontColor(白色);
}
/************************************************************************/
/*初始化屏幕*/
/************************************************************************/
void initScreen()
{
系统(《CLS》);
显示系统标题();
printf('请输入数字序列号,选择您要执行的操作:\ n’);
printf('1,添加学生信息\ n’);
printf('2,删除学生信息\ n’);
printf('3,修改学生信息\ n’);
printf('4,查询学生信息\ n’);
printf('5,排序\ n’);
printf('6,保存(如打开自动保存,则无需手动执行)\ n’);
printf('7,自动保存:');
print autostoreinfo();
printf('8,投票系统\ n’);
printf('9,导出学生信息\ n’);
setFontColor(浅红色);
printf('10,退出学生管理系统\ n’);
setFontColor(白色);
}
/************************************************************************/
/*从指定位置开始清除指定长度元素*/
/************************************************************************/
void gotodelete(int x,int y,int length)
{
int I;
for(I=0;我长度;我)
{
gotoxy(x i,y);
printf(" ");
}
}
/************************************************************************/
/*清除指定位置元素*/
/************************************************************************/
void gotodelete(int x,int y)
{
gotodelete(x,y,1);
}
/************************************************************************/
/*投票系统*/
/************************************************************************/
voteSystem()
{
弯曲件已经找到;
char name[20];
int count,I,j;
学生* pStu,* pTmp
学生* * pStuArr
//初始化票数清零
pStu=G _ pStu head-pNext;
while(pStu!=空)
{
pStu-count=0;
pStu=pStu-pNext;
}
count=0;
pStuArr=(学生* *)malloc(4 * 100);//用于存放已经获得票数的同学指针
gotoxy(0,6);
printf('投票结果如下:\ n’);
gotoxy(0,3);
printf('请在下方输入你想投给的人的姓名(输入-1返回主菜单):\ n’);
while (1)
{
gotodelete(0,4,20);//清空输入行
gotoxy(0,4);
scanf('%s ',名称);
if(strcmp(name,'-1')==0)
{
打破;
}
hasFound=false
pStu=G _ pStu head-pNext;
//在系统中查找对应的人名
while(pStu!=空)
{
if(strcmp(pStu-name,name)==0)
{
hasFound=true
打破;
}
pStu=pStu-pNext;
}
如果(!hasFound)
{
printf('查无此人!');
睡眠(1000);
gotodelete(0,5,20);
继续;
}
//找到之后,这个人所对应的票数一
pStu-count;
for(I=0;我数;我)
{
if(pStuArr[i]==pStu)
{
打破;
}
}
if(i==count)//说明未找到,则添加进候选人数组
{
pStuArr[count]=pStu;
如果(计数% 100==0)
{
pStuArr=(学生**)realloc(pStuArr,计数100);
}
}
//冒泡排序,票数
for(I=0;我数-1;我)
{
for(j=I ^ 1;j计数;j)
{
if(pStuArr[I]-count pStuArr[j]-count)
{
pTmp=pStuArr[I];
pstuarr[I]=pstuarr[j];
S7-1200可编程控制器:
}
}
}
哥特式氧化物(0.7);//跳转到打印票数的那行
//打印票数
for(I=0);我数;(一)
{
如果(i==0)
{
setfontcolor(浅绿色);
}
其他语句
{
setFontColor(白色);
}
printf(% d % s \ t % d \ n),pStuArr[i]-num,pStuArr[i]-name,pStuArr[I]-count];
}
}
自由(pstuarr);
}
-好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧
*/
-好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧
弯曲件汇出学生资讯()
{
学生* pstu
* fp文件:
pstn=g _ pstn up-pnext;
if((fp=fopen(FILE_EXPORT," w ")=null)
{
返回错误的
}
而(pstn!=空)
{
fprinff(FP," % d % s % s % . 2f % . 2f % . 2f \ n ",pstn-num,pstn。名称,pstn-sex,
一种常用旧式电话系统分数[0],pstn分数[1],pstn分数[2],pstn-averge;
pstn=pstn-pnext;
}
fclose(FP);
返回真实的
}
-好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧
(为
-好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧
bool saveStudentInfo()
{
*fp文件:
学生* pstu
pstu=g _ pstuat
if((fp=fopen(FILE_DATABASE,' WB ')==null)
{
返回错误的
}
fwrite(g _ auto stor,sizeof(g _ auto stor),1,FP);
而(pstn!=空)
{
fwrite(pstn、sizeof(学生)、1、FP);
pstn=pstn-pnext;
}
fclose(FP);
返回真实的
}
-好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧
*/
-好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧
bool loadStudentInfo()
{
*fp文件:
int计数
学生stu 、* pstu 、* pstn un
count=0;
pstu=g _ pstuat
if((FP=fopen)(file _ database,' Rb ')==null)
{
返回错误的
}
fread(g _ auto stor,sizeof(g _ auto stor),1,FP);//读取是否自动保存
while(1)
{
弗雷阿德(斯图,西泽夫(学生),1,FP);//读取文档中每个同学的数据
if(feof(fp))//到文档尾则跳出
{
打断;打断;
}
如果(计数0
{
pStuNew=(学生*)malloc(sizeof(学生));
运动记忆(pStuNew、stu、sizeof(学生)-4);//将结构体除指针外的所有数据拷贝进内存
p tunew-pnext=null;
pstn-pnext=pstn un;
pstu=pstunew
}
if(stu.pNext==NULL)
{
打断;打断;
}
}
fclose(FP);
返回真实的
}
-好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧
*/
-好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧
bool sortStudentInfo()
{
int order1,order 2;
弯曲件交换数据;
坦克耶索诺;
学生* pstu 1 、* pstu 2、tmpstu
pstn 1=g _ pstn up-pnext;
if(pstn 1==null)
{
printf('系统中无学生信息!\ n ';
系统("暂停");
返回错误的
}
:
:
:
:
:
:
:
扫描文件(" %d,顺序1 ");
如果(订单1=1订单1=6)
{
printf('请选择正序运筹学倒序排列?();
:
:
scanf("% d,顺序2 ");
如果(订单2=1订单2=2)
{
//冒泡排序
为(;pstn 1-pnext!=nullpstn 1=pstn 1-pnext)
{
for(pstn 2=pstn 1-pnext);pstu 2!=nullpstn 2=pstn 2-pnext)
{
swapData=false://是否交换数据
交换机(订单1)
{
案例
{
如果(订单2==1)?(pstn 1-号码pstn 2-号码):(pstn 1-号码)
{
swapData=true:
}
打断;打断;
}
案例
{
如果(订单2==1)?(strcmp(pstn 1-名称,pstn 2-名称)0):(strcmp(pstn 1-名称,pstn 2-名称)0)
{
swapData=true:
}
打断;打断;
}
案例
案例
案例
{
如果(订单2==1)?(pstn 1分数[订单1 - 3]pstn 2分数[订单1-3]):(pstn 1分数[订单1-3]pstn 2分数[顺序1-3])
{
swapData=true:
}
打断;打断;
}
案例
{
如果(订单2==1)?(pstn 1-故障pstn 2-故障):(pstn 1-故障pstn 2-故障)
{
swapData=true:
}
打断;打断;
}
}
如果(交换数据)
{
//交换内存数据,只需要将除pNext指针外的结构体数据拷贝交换即可
运动记忆(tmpStu、pStu1、sizeof(学生)-4);
运动记忆(pstu 1、pstu 2、sizeof(学生)-4);
八字胡(pStu2、tmpStu、sizeof(学生)-4);
}
}
}
printf('排序完成,是否显示?是/否\ n ';
getchar();//过滤掉输入时的换行符
scanf("% c,yes or no ");
如果(耶索诺='Y' ||耶索诺='Y ')
{
pstn 1=g _ pstn up-pnext;
setfontcolor(浅绿色);
printf(LIST_TITLE_1)://显示列表标题头
setFontColor(白色);
//打印排序后的各个学生信息
while(pstn 1!=空)
{
printf("% d % s % s %)。2f %。2f %。2f %。2f \ n ',pstn 1-号码,pstn 1-姓名,pstn 1-性别),
pstn 1分数[0],pstn 1分数[1],pstn 1分数[2],pstn 1-averge;
pstn 1=pstn 1-pnext;
}
系统("暂停");
}
返回真实的
}
}
返回错误的
}
-好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧
*/
-好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧
请参阅searchStudentInfo()
{
布尔找到了
int order、stuID、count、I、min、max
浮点分数;
茶名称[20];
学生* pstu
学生* * pstuarr
pstuarr=null
while (1)
{
系统(“cls”);
show system title();
if(pstn RR!=& lt客户名称& gt
{
自由(pstuarr);
}
count=0;
stuid=0;
hasfound=false
pstn=g _ pstn up-pnext;
pStuArr=(学生* *)malloc(4 * 100);//初始化查询到后存放的学生信息指针数组
:
:
:
:
:
:
:
:
scanf("% d,顺序");
交换机(订单)
{
案例
{
:
scanf("% d,stuid ");
而(pstn!=空)
{
if(pstn-num==stuid)
{
hasfound=true
打断;打断;
}
pstn=pstn-pnext;
}
if(hasFound)//
{
setfontcolor(浅绿色);
printf(LIST_TITLE_1):
setFontColor(白色);
printf("% d % s % s %)。2f %。2f %。2f %。2f \ n ',pstn-num,pstn名称、pstn-sex、
一种常用旧式电话系统分数[0],pstn分数[1],pstn分数[2],pstn-averge;
}
打断;打断;
}
案例
{
:
扫描文件(" %s,名称");
而(pstn!=空)
{
if(strcmp(pstn名称,名称)==0)
{
hasfound=true
pstn RR[count]=pstn;
if(计数% 100==0)
{
pstuarr=(学生**)真主管(pstn RR,计数100);
}
}
pstn=pstn-pnext;
}
如果(已找到)
{
setfontcolor(浅绿色);
printf(LIST_TITLE_1):
setFontColor(白色);
for(I=0);我数;(一)
{
printf(% d % s % s %)。2f %。2f %。2f %。2f \ n,' pStuArr[I]-编号,pStuArr[I]-名称,pStuArr[I]-性别),
pStuArr[i]-score[0],pStuArr[i]-score[1],pStuArr[i]-score[2],pStuArr[I]-averge;
}
}
打断;打断;
}
案例
案例
案例
案例
{
char * subjectstrarr,中;
主观性【阶-3】);
scanf("% d % d,最小值,最大值");
而(pstn!=空)
{
if(阶6)/(3 ~ 5)
{
分数=pstu评分[订单-3];
}
否则//顺序=6
{
分数=pstu警报:
}
如果(分数=最小分数=最大值)
{
//找到符合条件的学生信息,则加入到指针数组中去
hasfound=true
pstn RR[count]=pstn;
if(计数% 100==0)
{
pstuarr=(学生**)真主管(pstn RR,计数100);
}
}
pstn=pstn-pnext;
}
如果(已找到)
{
setfontcolor(浅绿色);
printf(LIST_TITLE_1):
setFontColor(白色);
//打印指针数组中的学生信息
for(I=0);我数;(一)
{
printf(% d % s % s %)。2f %。2f %。2f %。2f \ n,' pStuArr[I]-编号,pStuArr[I]-名称,pStuArr[I]-性别),
pStuArr[i]-score[0],pStuArr[i]-score[1],pStuArr[i]-score[2],pStuArr[I]-averge;
}
}
打断;打断;
}
案例
{
hasfound=true
setfontcolor(浅绿色);
printf(LIST_TITLE_1):
setFontColor(白色);
而(pstn!=空)
{
printf("% d % s % s %)。2f %。2f %。2f %。2f \ n ',pstn-num,pstn名称、pstn-sex、
一种常用旧式电话系统分数[0],pstn分数[1],pstn分数[2],pstn-averge;
pstn=pstn-pnext;
}
打断;打断;
}
默认设置:
{
转到实验室_搜索:
}
}
如果(!hasFound)
{
printf('未能找到相应的学生信息!\ n ';
}
系统("暂停");
}
实验室_搜索:
自由(pstuarr);
}
-好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧
*/
-好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧
bool deleteStudentInfo()
{
坦克耶索诺;
int stuid
布尔找到了
学生* pstn 、* pstn 1;
hasfound=false
pstn=g _ pstn up-pnext;
pstu 1=g _ pstuhead
:
scanf("% d,stuid ");
而(pstn!=空)
{
if(pstn-num==stuid)
{
hasfound=true
打断;打断;
}
pstu 1=pstu
pstn=pstn-pnext;
}
如果(已找到)
{
:
setfontcolor(浅绿色);
printf(LIST_TITLE_1):
setFontColor(白色);
printf("% d % s % s %)。2f %。2f %。2f %。2f \ n ',pstn-num,pstn名称、pstn-sex、
一种常用旧式电话系统分数[0],pstn分数[1],pstn分数[2],pstn-averge;
printf('是否删除?“是/否”;
getchar();//过滤掉输入时的换行符
scanf("% c,yes or no ");
如果(耶索诺='y' ||耶索诺='y ')
{
pstn 1-pnext=pstn-pnext;
自由(pstn);
:
}
其他语句
{
hasfound=false
}
}
其他语句
{
:
}
系统("暂停");
返回hasfound
}
-好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧
*/
-好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧,好吧
bool modifyStudentInfo()
{
int顺序,计数,I;
int stuid
茶名称[20];
坦克耶索诺;
布尔函数有修改
学生* pstu
学生* * pstuarr
hasmodify=false
count=0;
pstn=g _ pstn up-pnext;
pStuArr=(学生* *)malloc(4 * 100);//用于存放查找到的学生信息指针,这里定义指针数组是防止查询姓名出现重名
:
:
:
scanf("% d,顺序");
如果(命令==1)
{
:
scanf("% d,stuid ");
而(pstn!=空)
{
if(pstn-num==stuid)
{
pstn RR[count]=pstn;
打断;打断;
}
pStu=pStu-pNext;
}
}
else if(order==2)
{
printf('请输入要修改的学生姓名:\ n’);
scanf('%s ',名称);
while(pStu!=空)
{
if(strcmp(pStu-name,name)==0)
{
pStuArr[count]=pStu;
if(count % 100==0)//如果数组存放满了,则再次申请内存
{
pStuArr=(学生**)realloc(pStuArr,计数100);
}
}
pStu=pStu-pNext;
}
}
其他
{
返回错误的
}
if(count==0)
{
printf('未能找到任何信息,是否继续修改?y/N’);
getchar();//过滤掉输入时的换行符
扫描f('%c ',是或否);
if(yesOrNo=='y' || yesOrNo=='Y ')
{
系统(《CLS》);
显示系统标题();
返回modifyStudentInfo();
}
}
其他
{
printf('为您查找到%d个学生信息:\n ',计数);
setFontColor(浅绿色);
printf(LIST _ TITLE);
setFontColor(白色);
for(I=0;我数;我)
{
printf('%d 、%d %s %s %.2f %.2f %.2f\n ',i 1,pStuArr[i]-num,pStuArr[i]-name,pStuArr[i]-sex,
pStuArr[i]-score[0],pStuArr[i]-score[1],pStuArr[I]-score[2]);
}
printf('请输入您要修改的信息序号(1~%d),其他数字返回主菜单\n ',计数);
scanf('%d ',顺序);
如果(订单=1订单=计数)
{
printf('请依次输入\ n’);
setFontColor(浅绿色);
printf(LIST _ TITLE);
setFontColor(白色);
pStu=pStuArr[order-1];
scanf('%d %s %s %f %f %f ',pStu-num,pStu-name,pStu-sex,pStu-score[0],pStu-score[1],pStu-score[2]);
pStu-averge=(pStu-score[0]pStu-score[1]pStu-score[2])/3;
hasModify=true
}
}
免费(pStuArr);
返回哈斯修改
}
/************************************************************************/
/*检测学号是否存在*/
/************************************************************************/
bool checkStuIDExist(int stuID)
{
学生* pStu
pStu=G _ pStu head-pNext;
while(pStu!=空)
{
if(pStu-num==stuID)
{
返回真实的
}
pStu=pStu-pNext;
}
返回错误的
}
/************************************************************************/
/*添加学生信息*/
/************************************************************************/
bool addStudentInfo()
{
printf('输入-1回车,返回上级菜单\ n’);
setFontColor(浅绿色);
printf(LIST _ TITLE);
setFontColor(白色);
char c;
bool hasAdd=false
学生* pStu=G _ pStuHead
学生* pStuNew
while (pStu-pNext!=空)
{
pStu=pStu-pNext;
}
while(1)
{
pStuNew=(Student *)malloc(sizeof(Student));
scanf('%d ',pStuNew-num);
if(p tunew-num==-1)//输入-1返回主菜单
{
while ((c=getchar())!=EOF c!=' \ n ');//不停地使用getchar()获取缓冲中字符,直到获取的c是" \n "或文件结尾符文件结束为止
免费(pStuNew);
返回hasAdd
}
else if(checkStuIDExist(p tunew-num))
{
while ((c=getchar())!=EOF c!=' \ n ');//不停地使用getchar()获取缓冲中字符,直到获取的c是" \n "或文件结尾符文件结束为止
printf('该学号已存在,请重新输入!\ n’);
免费(pStuNew);
继续;
}
hasAdd=true
scanf('%s %s %f %f %f ',p tunew-name,p tunew-sex,p tunew-score[0],
pStuNew->score[1], &pStuNew->score[2]); pStuNew->averge = (pStuNew->score[0] + pStuNew->score[1] + pStuNew->score[2]) / 3; pStuNew->pNext = NULL; pStu->pNext = pStuNew; pStu = pStuNew; } return hasAdd; } /************************************************************************/ /*根据指令序号执行对应功能 */ /************************************************************************/ bool orderToExecute(int order) { bool succ; succ = false; if(order != Func_Save && order != Func_AutoSave && order!= Func_Export) { system("CLS"); showSystemTitle(); } switch (order) { case Func_Add://添加 { succ = addStudentInfo(); break; } case Func_Delete://删除 { succ = deleteStudentInfo(); break; } case Func_Modify://修改 { succ = modifyStudentInfo(); break; } case Func_Search://搜索 { searchStudentInfo(); break; } case Func_Sort://排序 { succ = sortStudentInfo(); break; } case Func_Save://保存 { succ = saveStudentInfo(); if(succ) { gotoxy(42, Func_Save + 3); setFontColor(LIGHTGREEN); printf("保存成功!"); setFontColor(WHITE); gotodelete(0, Func_ExitSystem + 4, 2); gotoxy(0, Func_ExitSystem + 4); } return false; } case Func_AutoSave://设置自动保存 { G_autoStore = ! G_autoStore; printAutoStoreInfo(); orderToExecute(Func_Save);//保存配置 break; } case Func_Vote://投票系统 { voteSystem(); break; } case Func_Export://导出所有学生信息(明文) { succ = exportStudentInfo(); gotoxy(17, Func_Export + 3); setFontColor(LIGHTGREEN); if(succ) { printf("导出成功!"); } else { printf("导出失败!"); } setFontColor(WHITE); gotodelete(0, Func_ExitSystem + 4, 2); gotoxy(0, Func_ExitSystem + 4); return false; } default: { break; } } return succ; } int main(int argc, char* argv[]) { int order; bool succ; system("title 学生管理系统 by 机智蛋"); order = 0; succ = false; G_pStuHead = (Student*)malloc(sizeof(Student)); G_pStuHead->pNext = NULL; loadStudentInfo(); while(1) { if(order != Func_Save && order != Func_AutoSave && order != Func_Export)//当输入这几个指令时不需要初始化屏幕 { initScreen(); } if(succ && order != Func_Save && G_autoStore)//执行自动保存 { orderToExecute(Func_Save); } succ = false; do { scanf("%d", &order); if(order >= Func_Add && order <= Func_ExitSystem) { break; } else { printf("指令错误,请重新输入\n"); } } while (1); if(order == Func_ExitSystem)//退出 { printf("欢迎下次继续使用,拜拜~~\n"); return 0; } succ = orderToExecute(order);//执行功能 } return 0; }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。