c语言课程设计学生学籍信息管理系统大学论文.docx
《c语言课程设计学生学籍信息管理系统大学论文.docx》由会员分享,可在线阅读,更多相关《c语言课程设计学生学籍信息管理系统大学论文.docx(32页珍藏版)》请在冰豆网上搜索。
c语言课程设计学生学籍信息管理系统大学论文
学年论文
(课程论文、课程设计)
题 目:
学生学籍信息管理系统
作 者:
所在学院:
信息科学与工程学院
专业年级:
指导教师:
职 称:
讲师
2014年12月31日
目录
1.设计内容、任务以及要求..........................
1.1设计内容、任务
1.2设计要求
2.设计思路概述....................................
2.1系统基本功能
2.2具体设计思想
2.3系统的总体流程图
3.函数设计的实现..............................
3.1结构的定义
3.2各个函数的设计简介
3.3源代码
3.4删除模块的详细介绍
4.重点程序的调试及运行............................
删除函数的测试
5.总结............................................
6.致谢............................................
7.参考文献........................................
1.设计内容、任务以及要求
1.1设计内容、任务
主要利用c语言的文件操作能力设计开发一个学生学籍管理系统,至少具有如下功能:
信息输入、输出、查找、删除、成绩排序等功能。
具体内容如下:
(1)通过提示菜单选择可以进行的操作;
(2)将学生的信息存入文件中,并命名为txl.txt;
(3)在本系统中可以进行管理系统包含的基本操作:
a.查看所有学生信息;
b.输入一个学生的姓名或学号,从当前的信息中查找,如果找到则显示该学生的相关信息,如果没找到则给出相关提示信息;
c.输入一个学生的姓名或学号,从当前信息中查找,如果找到则删除该学生的基本信息,如果没找到则给出相关提示信息;
d.将学生的成绩按降序排序;
Txl.txt文件中:
(4)学生基本信息包括:
学号、姓名、性别、班级、籍贯、分数等简单信息;
1.2设计要求
明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识;提高学生用高级语言进行程序设计的能力,重点提高用c语言进行文件操作的编程技术水平;初步了解软件开发的一般方法和步骤。
2.设计思路概述
2.1系统基本功能
外部操作:
根据要求系统要有查看全部学生信息,查找、添加、删除某一个学生信息;
内部操作:
将学生的信息存入文件中,并命名为txl.txt;
为了接近实际学生学籍管理系统,增加了一个权限认证功能(使用前需要输入正确的账号及密码)。
2.2具体设计思想
(1)以结构化各个功能模块,函数间的调用精简整个函数;
(2)以全局结构来随时定义结构数组及其结构;
(3)以写一个信息存一个的思想,实现多个添加功能;
(4)以先全部读入内存,再打印信息的思想,实现显示全部信息;
(5)以先判断再打印的思想,实现查找是否有某一学生信息;
(6)以先判断再删除的思想,实现删除某一学生信息;
(7)以选择排序算法的思想,实现学生成绩的排序
2.3系统的总体流程图
3.函数设计的实现
3.1结构的定义及宏定义
为了方便使用结构此系统结构全为全局类型定义,如下:
structstudent_info
{charno[11];
intage;
enumSEXsex;
charname[20];
intclassno;
floatgrade;
charnationality[20];
};
typedefstructstudent_infoSTUINFO;
STUINFOtxl[100];
宏定义
#defineA1
#defineB2
#defineC3
#defineD4
#defineE5
#defineF0
全局变量
intlast=0;
3.2各个函数的设计简介
此系统一共十九个函数如下所示
1)intKey(char,char);
比较判断账户名和账户密码是否正确
2)intck(void);
显示提示窗口提示密码或者账户名错误,用鼠标回到程序
3)voidgetpassword();
密码函数
4)voidfindchoice();
检索模块中的选择查找方式的函数
5)voidfindmenu();
显示查找或删除菜单界面
6)voidnumfind();
实现按学号查找并输出功能
7)voidnamfind();
实现按姓名查找并输出功能
8)voidEstablish();
将学生信息写入内存并保存入文件
9)voiddochoice(int);
接受用户的选择,并启动相应函数
10)voidmainmenu();
显示主菜单
11)voidBead();
将文件读取到内存中
12)oidWrite();
将内存中的学生信息写入文件中
13)intgetchoice();
接受用户的选择键,并传送至dochoice(int)函数
14)voidSort();
实现排序功能
15)voidOutputall();
输出全部信息
16)voidfindchoicedelete();
17)voidNumdelete();
实现按学号删除功能
18)voidNamdelete();
实现按姓名删除功能
19)intmain(intargc,char*argv[])
主函数实现调用所有其他函数功能
3.3源代码
#include
#include
#include
#include
#include
#include
#defineA1
#defineB2
#defineC3
#defineD4
#defineE5
#defineF0
FILE*fp;
enumSEX{male,female};
structstudent_info
{charno[11];
intage;
enumSEXsex;
charname[20];
intclassno;
floatgrade;
charnationality[20];
};
typedefstructstudent_infoSTUINFO;
STUINFOtxl[100];
intlast=0;
intKey(char,char);
intck(void);
voidgetpassword();
voidfindchoice();
voidfindmenu();
voidnumfind();
voidnamfind();
voidEstablish();
voiddochoice(int);
voidmainmenu();
voidBead();
voidWrite();
intgetchoice();
voidSort();
voidOutputall();
voidfindchoicedelete();
voidNumdelete();
voidNamdelete();
intmain(intargc,char*argv[])
{intchoice;
getpassword();
Bead();
while
(1)
{mainmenu();
choice=getchoice();
dochoice(choice);
system("pause>nu1");}
return0;
}
voidBead()//从文件中把内容读取到内存中
{inti=0;
if((fp=fopen("txl.txt","rb"))==NULL)
{printf("文件读取失败,请检查文件是否存在!
");
last=0;
}
else
{while(!
feof(fp))
{if(fread(&txl[i],sizeof(STUINFO),1,fp)==1)
i++;
}
last=i;
}
fclose(fp);
}
voidWrite()//将内存中的内容写到文件中
{inti=0;
if((fp=fopen("txl.txt","wb"))==NULL)
{printf("文件储存失败,请检查文件是否存在!
");
exit(0);
}
while(i{fwrite(&txl[i],sizeof(STUINFO),1,fp);
i++;
}
fclose(fp);}
voidmainmenu()//主菜单
{system("cls");
printf("\t\t========欢迎进入新疆大学学籍管理系统========\n");
printf("\t\t请选择以下操作:
\n");
printf("\t\t1.建立档案:
2.检索信息:
\n");
printf("\t\t3.输出全部信息:
4.排序:
\n");
printf("\t\t5.删除档案0.退出\n");
printf("\t\t============================================");
printf("\n给出你的选择0--5\n");
}
voidEstablish()//建立档案
{charsex;
printf("第%d个学生的学号:
\n",last+1);
scanf("%s",&txl[last].no);
printf("姓名:
\n");
scanf("%s",&txl[last].name);
printf("年龄:
\n");
scanf("%d",&txl[last].age);
printf("分数:
\n");
scanf("%f",&txl[last].grade);
printf("班级:
\n");
scanf("%d",&txl[last].classno);
printf("籍贯:
\n");
scanf("%s",&txl[last].nationality);
while
(1)
{fflush(stdin);//清除键盘缓存
printf("性别(m/f):
\n");
scanf("%c",&sex);
if(sex=='f'||sex=='m')
break;
fflush(stdin);
}
txl[last].sex=(sex=='m')?
male:
female;
last++;
Write();}
voidnamfind()//按姓名查找
{charname[20];
inti;
intfind=0;
printf("请输入姓名:
");
scanf("%s",&name);
for(i=0;ifind;i++)
{
if(!
strcmp(name,txl[i].name))
{find=1;
printf("========================================\n");
printf("学号:
%s\n",txl[i].no);
printf("姓名:
%s\n",txl[i].name);
printf("年龄:
%d\n",txl[i].age);
printf("分数:
%4.1f\n",txl[i].grade);
printf("籍贯:
%s\n",txl[i].nationality);
printf("性别:
%s",(txl[i].sex==male)?
"male":
"female");
}
}
if(!
find)
{
printf("对不起,姓名:
%s没有被找到",name);
}
}
voidnumfind()//按学号查找
{
inti;
charnum1[12];
intfind=0;
printf("请输入您要查询的学号:
");
scanf("%s",&num1);
for(i=0;ifind;i++)
{
if(!
strcmp(num1,txl[i].no))
break;
}
if(ifind)
{
printf("学号为%s的学生的基本信息为:
\n",num1);
printf("学号:
%s\n",txl[i].no);
printf("姓名:
%s\n",txl[i].name);
printf("年龄:
%d\n",txl[i].age);
printf("分数:
%4.1f\n",txl[i].grade);
printf("籍贯:
%s\n",txl[i].nationality);
printf("性别:
%s",(txl[i].sex==male)?
"male":
"female");
printf("\n");
}
else
printf("您输入的学号不存在!
\n");}
intgetchoice()//获得选择
{intchoice;
scanf("%d",&choice);
returnchoice;
}
voiddochoice(intchoice)//
{switch(choice)
{caseA:
Establish();break;
caseB:
findmenu();findchoice();break;
caseC:
Outputall();break;
caseD:
Sort();Outputall();break;
caseE:
findmenu();findchoicedelete();break;
caseF:
exit(0);
}
}
voidfindchoice()//选择查找方式
{
intm;
while
(1)
{
scanf("%d",&m);
switch(m)
{
case1:
numfind();
findmenu();break;
case2:
namfind();
findmenu();break;
case0:
break;
}if(m==0)
break;
}mainmenu();}
voidfindmenu()//查找/删除界面
{
printf("\t\t***********************************************\n");
printf("\t\t*欢迎使用查找/删除操作*\n");
printf("\t\t*1.按学号查找/删除*\n");
printf("\t\t*2.按姓名查找/删除*\n");
printf("\t\t*0.返回上一级*\n");
printf("\t\t***********************************************\n");
printf("\t\t请输入0--2:
");
}
voidfindchoicedelete()//选择删除方式
{
intm;
while
(1)
{
scanf("%d",&m);
switch(m)
{
case2:
Namdelete();findmenu();break;
case1:
Numdelete();findmenu();break;
case0:
break;
}
if(m==0)
break;}
mainmenu();}
voidSort()//排序
{
inti,j,k;STUINFOp;
for(i=0;i{
k=i;
for(j=i+1;j{
if(txl[j].grade>txl[k].grade)
k=j;}
if(k!
=i)
{p=txl[i];
txl[i]=txl[k];
txl[k]=p;
}
}
}
voidOutputall()//输出全部信息
{inti;
printf("学号\t年龄姓名性别籍贯分数\n");
for(i=0;i{printf("%-s",txl[i].no);
printf("%-4d",txl[i].age);
printf("%-6s",txl[i].name);
printf("%-4s",(txl[i].sex==male)?
"male":
"female");
printf("%-4s",txl[i].nationality);
printf("%-4.1f",txl[i].grade);
printf("\n");
}
}
intKey(charp[20],charq[20])
{if(strcmp(p,"名字")==0&&strcmp(q,"nishengri")==0)
return0;
else
return1;
}
voidgetpassword()
{charp[20],q[20];
printf("请输入账号名-----------\n");
scanf("%s",&p);
printf("请输入账号密码-----------\n");
scanf("%s",&q);
Key(p,q);
if(Key(p,q)==0)
;
else
{system("cls");
ck();
getpassword();}
}
voidNamdelete()//按姓名删除
{charname[20];
inti,mark;
intfind=0;
printf("请输入姓名:
");
scanf("%s",&name);
for(i=0;ifind;i++)
{
if(!
strcmp(name,txl[i].name))
{find=1;
mark=i;
break;
}
}
if(!
find)
{
printf("sorry,name:
%s没有输入!
!
",name);
}
else
{
for(i=mark;i<=last;i++)
txl[i]=txl[i+1];
last--;
Write();printf("删除成功!
!
\n");}
}
voidNumdelete()//按学号删除
{charno[20];
inti,mark;
intfind=0;
printf("请输入学号");
scanf("%s",&no);
for(i=0;ifind;i++)
{
if(!
strcmp(no,txl[i].no))
{find=1;
mark=i;
break;
}
}
if(!
find)
{
printf("对不起,学号:
%s没有输入",no);
}
else
{
for(i=mark;i<=last;i++)
txl[i]=txl[i+1];
last--;
Write();
printf("删除成功.\n");
}
}
intck(void)
{
MessageBox(NULL,"密码或用户名错误","错误提示",MB_OK);
return0;
}
3.4删除模块的详细介绍
下面只重点介绍删除模块函数的设计与实现。
1)功能介绍:
删除函数主要是将已保存的某个学生信息删除,且保证其他学生的信息不受影响,适应于实际情况中的学生转学等其他特殊情况。
2)设计思想:
在c语言中,要想删除信息,只能利用覆盖思想,但为了不影响其他信息,要将后面的信息逐次往前覆盖,直到被删除信息的前一个人的信息。
最后将删除调整后的新信息重新保存入文件中,覆盖原来的文件,从而达到将文件中某个信息删除的目的。
3)具体设计
voidfindmenu()//查找/删除界面
{
printf("\t\t***********************************************\n");
printf("\t\t*欢迎使用查找/删除操作*\n");
printf("\t\t*1.按学号查找/删除*\n");
printf("\t\t*2.按姓名查找/删除*\n");printf("\t\t*0.返回上一级*\n");printf("\t\t***********************************************\n");
printf("\t\t请输入0--2:
");
}
先借用了检索函数的菜单,执行下面的程序
===============================================
voidfindchoicedelete()//选择删除方式
{
intm;
while
(1)
{
scanf("%d",&m);
switch(m)
{
case2:
Namdelete();findmenu();break;
case1:
Numdelete();findmenu();break;
case0:
break;}
if(m==0)
break;}
mainmenu();}
定义一个接受选择的变量m,利用switch的分支选择功能启动下一个函数—-利用姓名删除功能还是学号删除功能或是选择返回。
同时利用死循环使该功能不断进行下去,直到用户主动退出。
===================================================
voidNamdelete()//按姓名删除
{charname[20];
inti,mark;
intfind=0;
printf("请输入姓名:
");
scanf("%s",&name);
for(i=0