xsglxt学生管理系统文档格式.docx
- 文档编号:21760807
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:26
- 大小:107.37KB
xsglxt学生管理系统文档格式.docx
《xsglxt学生管理系统文档格式.docx》由会员分享,可在线阅读,更多相关《xsglxt学生管理系统文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
#defineCMD_STARTprintf("
\n\n#########Startacommand#########\n"
);
/*用来标记一个命令执行的开始*/
#defineCMD_ENDprintf("
\n#########Endacommand#########\n\n"
/*用来标记一个命令执行的结束,这两个语句是为了提供更好的用户界面而写的*/
#defineDATA_FILE"
data.dat"
/*这是数据文件名*/
#defineTEMP_FILE"
temp.dat"
/*这是一个临时的文件的名字,在删除记录的函数中使用的,参考Delete()函数*/
/*这是学生信息结构体*/
typedefstructtagStudent
{
charID[30];
/*学号*/
charName[30];
/*姓名*/
charClass[255];
/*班级*/
charSex;
/*性别,值为F或f或M或m*/
intMath;
/*数学成绩*/
intEnglish;
/*英语成绩*/
intCompute;
/*计算机成绩*/
intPhilosophy;
/*哲学成绩*/
intPE;
/*体育成绩*/
}Student;
intquit;
/*全局变量,在main()函数中,用来决定何时退出主循环*/
/*main模块*/
main()
intcmd;
/*用户所选的菜单项目的标号*/
quit=0;
/*初始化为不退出*/
/*这是程序的主循环,每次将主菜单打印出来供用户选择相应的序号来执行相应的功能*/
while(!
quit)
cmd=ShowMenu();
/*显示主菜单,并返回用户所选择的菜单项的编号*/
CMD_START/*在屏幕上打印一行分隔符,告诉用户这是一个子功能的开始*/
switch(cmd)/*用多项分支根据用户的选择调?
相应的函数*/
{case1:
View();
break;
/*用户选择1号菜单,程序执行查看的数据文件的函数*/
case2:
Add();
/*用户选择2号菜单,程序执行添加记录的函数*/
case3:
Delete();
/*用户选择3号菜单,程序执行删除记录的函数*/
case4:
Find(4);
/*Find_ID,4号菜单执行按ID(学号)查找的功能*/
case5:
Find(5);
/*Find_Name,5号菜单执行按Name(姓名)查找的功能*/
case6:
quit=1;
/*用户选择了退出菜单*/
/*case7:
自己完成
Statistics();
用户选择7号菜单,程序执行统计数据的函数*/
printf("
Thankyouforyourusing.\n\nHappyeveryday!
!
\n\nByeBye....\n"
default:
PleaseInputanumberbetween\t1\tto\t7.\n"
/*用户所输入的序号不在所处理的范围内*/
}
CMD_END/*打印一行分隔符,告诉用户他所选择的菜单的功能已经执行完毕*/
if(quit!
=1)/*检查用户是否要求退出*/
{printf("
PressanykeytoReturnMainMenu....\n"
getch();
/*用一个无回显的字符输入函数来实现暂停执行,按任意键继续的功能*/
}}}
/*菜单模块*/
intShowMenu()
{intcmd=0;
/*保存用户的选择*/
/*定义程序所支持的菜单项目*/
charMenu_SeeData[]="
\t1.\tViewtheRecordsinthedatafile\n"
;
/*查看数据文件*/
charMenu_Add[]="
\t2.\tAddNewRecord\n"
/*添加记录*/
charMenu_Delete[]="
\t3.\tDeleteanoldRecord\n"
/*删除记录*/
charMenu_Find_ID[]="
\t4.\tFindaRecordfromtheID\n"
/*按学号(ID)查找*/
charMenu_Find_Name[]="
\t5.\tFindaRecordfromtheName\n"
/*按姓名查找*/
charMenu_Quit[]="
\t6.\tQuit\n"
/*退出*/
charMenu_Statistics[]="
\t7.\tMakeaStatistics\n"
/*统计分析*/
/*在屏幕上打印主菜单*/
printf("
\n\n############MainMenu###############\n"
printf("
##############################################\n\n"
printf(Menu_SeeData);
printf(Menu_Add);
printf(Menu_Delete);
printf(Menu_Find_ID);
printf(Menu_Find_Name);
printf(Menu_Quit);
printf(Menu_Statistics);
\n##############################################"
\n\nInputtheindexofyourchoice:
"
scanf("
%d"
&
cmd);
/*接受用户选择*/
\n"
returncmd;
/*返回用户的输入,交给主循环处理*/}
/*从键盘输入记录到内存模块*/
Input_Rec(Student*stu)/*让用户输入一个学生的各项信息*/
{if(stu==NULL)
return;
\nName="
scanf("
%s"
stu->
Name);
/*下面这段代码实现只能输入F,f,M,m的功能*/
\tSex=(F|M)"
while
(1)
{stu->
Sex=getch();
/*无回显输入*/
if(stu->
Sex=='
F'
||stu->
f'
M'
m'
)
%c"
Sex);
/*将用户输入的字符输出,模拟正常输入数据时的回显*/
}}
/*下面给出提示,让用户输入结构体的各项内容*/
\nID="
stu->
ID);
\nClass="
Class);
\nMath="
&
(stu->
Math));
\nEnglish="
&
English));
\nCompute="
Compute));
\nPhilosophy="
Philosophy));
\nPE="
PE));
}
/*从文件中读入到内存模块*/
intReadData(FILE*fp,Student*Dest_Rec)/*读取数据记录*/
{intr;
if((fp==NULL)||(Dest_Rec==NULL))
return0;
/*ERROR*/
r=fread(Dest_Rec,sizeof(Student),1,fp);
if(r!
=1)
return1;
/*从内存中输出到文件模块*/
intWriteData(FILE*fp,Student*Src_Rec)/*写入数据记录*/
{intr;
if((fp==NULL)||(Src_Rec==NULL))
r=fwrite(Src_Rec,sizeof(Student),1,fp);
/*从内存中输出到屏幕模块*/
Output_Rec(Student*stu)/*在屏幕上输出一个学生的信息*/
Name:
%s"
stu->
\t\tSex:
if(stu->
Sex=='
||stu->
)
Male"
else
Female"
\nID:
%s\t\tClass:
%s\n"
ID,stu->
\nMath=%d\t\tEnglish=%d\n"
stu->
Math,stu->
English);
\nCompute=%d\n"
Compute);
\nPhilosophy=%d\t\tPE=%d\n"
Philosophy,stu->
PE);
/*查看数据文件记录内容模块*/
View()/*查看数据文件的记录内容*/
{FILE*fp;
/*文件指针*/
Studentrec;
/*存放从文件中读取的记录*/
inti=0;
/*实现计数和分屏打印的功能*/
fp=fopen(DATA_FILE,"
rb"
/*以二进制读方式打开数据文件*/
if(fp==NULL)/*打开文件出错*/
Cannotopenthedatafile:
DATA_FILE);
return;
while(ReadData(fp,&
rec))
/*ReadData()函数出错或到文件末尾时返回0,可以做循环条件*/
/*读文件的内容通过ReadData()模块来完成*/
{Output_Rec(&
rec);
/*正确读取,将记录输出*/
------------------------------------------"
/*打印一行分隔符,营造好的用户界面*/
i++;
/*计数器加一*/
if(i%4==0)/*显示4个暂停一下*/
\nPressanykeytocontinue...\n"
\nThecurrentdatafilehave\t%d\trecord.\n"
i);
fclose(fp);
}/*关闭文件*/
/*添加记录模块*/
Add()/*添加记录*/
{Studentrec;
FILE*fp=NULL;
Input_Rec(&
rec);
/*从键盘输入文件到内存*/
fp=fopen(DATA_FILE,"
ab"
/*以添加方式打开数据文件*/
if(fp==NULL)
Cannotopenthedatafiletowriteinto...\n"
if(WriteData(fp,&
rec)==1)/*将新记录写入文件,并检查是否正确写入*/
\n\nAddNewRecordSuccess\n\n"
\n\nFailedtoWriteNewRecordintothedatafile\n"
/*删除记录模块*/
Delete()/*删除记录*/
FILE*fpr,*fpw;
/*两个文件指针,分别用于读和写*/
charbuf[30];
/*接受用户输入的ID缓冲区*/
charcmd[255];
/*执行的系统命令*/
intdel_count;
/*实际删除的记录数目*/
del_count=0;
\nPleasetypetheIDoftherecordyouwantmetodelete."
\nTheID:
/*提示用户输入*/
buf);
fpr=fopen(DATA_FILE,"
/*从原来的记录文件中读取数据,跳过将要删除的记录*/
if(fpr==NULL)
Cannotopenthedatafiletoreadrecord...\n"
fpw=fopen(TEMP_FILE,"
wb"
/*打开一个临时文件保存不删除的记录*/
if(fpw==NULL)
{printf("
while(ReadData(fpr,&
rec))/*读取要保留的记录*/
{if(strcmp(rec.ID,buf)!
=0)
{WriteData(fpw,&
/*从内存中输出到文件模块*/
/*写入临时文件,然后删除原数据文件,再将临时文件该名为原数据文件的名字*/
{del_count++;
/*跳过的记录数目,即删除的数目*/
fclose(fpr);
fclose(fpw);
strcpy(cmd,"
del"
/*构造命令串,用system()函数执行,注意del后的空格*/
strcat(cmd,DATA_FILE);
system(cmd);
/*系统命令*/
rename(TEMP_FILE,DATA_FILE);
/*直接调用C语言的改名函数将临时文件改名为数据文件的名字*/
\nIhavedelete\t%d\trecord.\n"
del_count);
/*查询记录模块*/
Find(intisFind_From_ID)/*查找函数*/
{charbuf[30];
/*接受用户输入的条件的缓冲区*/
intfind_count;
/*查找到的记录数目*/
FILE*fp;
find_count=0;
\nCannotopenthedatafiletosearch...\n"
switch(isFind_From_ID)
{
/*ID,按学号查找*/
\nPleaseInputtheID:
buf);
rec))/*读取数据*/
{if(strcmp(rec.ID,buf)==0)/*比较*/
{find_count++;
Output_Rec(&
/*输出符合条件的记录*/
------------------------------------------\n"
/*Name,按姓名查找*/
\nPleaseInputtheName:
{if(strcmp(rec.Name,buf)==0)
\nPleasetyperightindex...\n"
/*处理isFind_From_ID既不是5也不是6的情况*/
if(find_count>
0)/*输出找到的记录数目*/
\nHavefindout\t%d\trecord\n"
find_count);
\nI'
mverysorry.\nIfailedtofindouttheoneyouwant.\n"
\nIsuggestthatyouchangesomeotherkeywords.\n"
/*复制模块*/
/*因为结构体不能直接用等号(=)赋值,写一个赋值函数*/
CopyRec(Student*dest_stu,Student*src_stu)
{/*复制源记录的各项到目标记录*/
strcpy(dest_stu->
Name,src_stu->
ID,src_stu->
Class,src_stu->
dest_stu->
Sex=src_stu->
Sex;
Math=src_stu->
Math;
English=src_stu->
English;
Compute=src_stu->
Compute;
Philosophy=src_stu->
Philosophy;
PE=src_stu->
PE;
万年历
万年历是我们日常生活中经常用到的一种非常实用的工具。
由于工作繁忙,人们常常忘记某一天是星期几,或者想快速地查询某一年中某一天是星期几,这时万年历就能派上用场了。
下面介绍一种万年历的实现方法,通过C语言编程实现基本的万年历查询功能,同时可在此基础上开发
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- xsglxt 学生 管理 系统