软件工程毕业设计c语言课程设计学生学籍信息管理系统Word格式.docx
《软件工程毕业设计c语言课程设计学生学籍信息管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《软件工程毕业设计c语言课程设计学生学籍信息管理系统Word格式.docx(32页珍藏版)》请在冰豆网上搜索。
c.输入一个学生的姓名或学号,从当前信息中查找,如果找到则删除该学生的基本信息,如果没找到则给出相关提示信息;
d.将学生的成绩按降序排序;
Txl.txt文件中:
(4)学生基本信息包括:
学号、姓名、性别、班级、籍贯、分数等简单信息;
1.2设计要求
明确课程设计的目的,能根据课程设计的要求,查阅相关文献,为完成设计准备必要的知识;
提高学生用高级语言进行程序设计的能力,重点提高用c语言进行文件操作的编程技术水平;
初步了解软件开发的一般方法和步骤。
2.设计思路概述
外部操作:
根据要求系统要有查看全部学生信息,查找、添加、删除某一个学生信息;
内部操作:
将学生的信息存入文件中,并命名为txl.txt;
为了接近实际学生学籍管理系统,增加了一个权限认证功能(使用前需要输入正确的账号及密码)。
(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<
stdio.h>
string.h>
stdlib.h>
memory.h>
conio.h>
windows.h>
FILE*fp;
enumSEX{male,female};
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()//将内存中的内容写到文件中
wb"
文件储存失败,请检查文件是否存在!
exit(0);
while(i<
last)
{fwrite(&
txl[i],sizeof(STUINFO),1,fp);
i++;
voidmainmenu()//主菜单
{system("
cls"
printf("
\t\t========欢迎进入新疆大学学籍管理系统========\n"
\t\t请选择以下操作:
\n"
\t\t1.建立档案:
2.检索信息:
\n"
\t\t3.输出全部信息:
4.排序:
\t\t5.删除档案0.退出\n"
\t\t============================================"
\n给出你的选择0--5\n"
voidEstablish()//建立档案
{charsex;
第%d个学生的学号:
last+1);
scanf("
%s"
&
txl[last].no);
姓名:
txl[last].name);
年龄:
%d"
txl[last].age);
分数:
%f"
txl[last].grade);
班级:
txl[last].classno);
籍贯:
txl[last].nationality);
{fflush(stdin);
//清除键盘缓存
性别(m/f):
%c"
sex);
if(sex=='
f'
||sex=='
m'
)
break;
fflush(stdin);
txl[last].sex=(sex=='
)?
male:
female;
last++;
Write();
voidnamfind()//按姓名查找
{charname[20];
inti;
intfind=0;
请输入姓名:
name);
for(i=0;
i<
last&
&
!
find;
i++)
{
if(!
strcmp(name,txl[i].name))
{find=1;
printf("
========================================\n"
printf("
学号:
%s\n"
txl[i].no);
姓名:
txl[i].name);
%d\n"
txl[i].age);
%4.1f\n"
txl[i].grade);
txl[i].nationality);
性别:
%s"
(txl[i].sex==male)?
"
male"
:
female"
}
if(!
find)
对不起,姓名:
%s没有被找到"
name);
voidnumfind()//按学号查找
{
charnum1[12];
请输入您要查询的学号:
num1);
strcmp(num1,txl[i].no))
break;
}
if(i<
学号为%s的学生的基本信息为:
num1);
else
您输入的学号不存在!
intgetchoice()//获得选择
choice);
returnchoice;
voiddochoice(intchoice)//
{switch(choice)
{caseA:
Establish();
caseB:
findmenu();
findchoice();
caseC:
Outputall();
caseD:
Sort();
Outputall();
caseE:
findchoicedelete();
caseF:
voidfindchoice()//选择查找方式
intm;
scanf("
m);
switch(m)
case1:
numfind();
findmenu();
case2:
namfind();
case0:
}if(m==0)
}mainmenu();
voidfindmenu()//查找/删除界面
\t\t***********************************************\n"
\t\t*欢迎使用查找/删除操作*\n"
\t\t*1.按学号查找/删除*\n"
\t\t*2.按姓名查找/删除*\n"
\t\t*0.返回上一级*\n"
\t\t请输入0--2:
voidfindchoicedelete()//选择删除方式
Namdelete();
Numdelete();
findmenu();
case0:
if(m==0)
mainmenu();
voidSort()//排序
inti,j,k;
STUINFOp;
for(i=0;
last-1;
k=i;
for(j=i+1;
j<
last;
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;
学号\t年龄姓名性别籍贯分数\n"
);
{printf("
%-s"
%-4d"
%-6s"
%-4s"
%-4.1f"
intKey(charp[20],charq[20])
{if(strcmp(p,"
名字"
)==0&
strcmp(q,"
nishengri"
)==0)
return1;
voidgetpassword()
{charp[20],q[20];
请输入账号名-----------\n"
p);
请输入账号密码-----------\n"
q);
Key(p,q);
if(Key(p,q)==0)
;
ck();
voidNamdelete()//按姓名删除
inti,mark;
请输入姓名:
mark=i;
sorry,name:
%s没有输入!
!
else
for(i=mark;
=last;
txl[i]=txl[i+1];
last--;
Write();
删除成功!
voidNumdelete()//按学号删除
{charno[20];
请输入学号"
no);
strcmp(no,txl[i].no))
对不起,学号:
%s没有输入"
no);
printf("
删除成功.\n"
intck(void)
MessageBox(NULL,"
密码或用户名错误"
错误提示"
MB_OK);
return0;
3.4删除模块的详细介绍
下面只重点介绍删除模块函数的设计与实现。
1)功能介绍:
删除函数主要是将已保存的某个学生信息删除,且保证其他学生的信息不受影响,适应于实际情况中的学生转学等其他特殊情况。
2)设计思想:
在c语言中,要想删除信息,只能利用覆盖思想,但为了不影响其他信息,要将后面的信息逐次往前覆盖,直到被删除信息的前一个人的信息。
最后将删除调整后的新信息重新保存入文件中,覆盖原来的文件,从而达到将文件中某个信息删除的目的。
3)具体设计
\t\t***********************************************\n"
先借用了检索函数的菜单,执行下面的程序
===============================================
break;
if(m==0)
定义一个接受选择的变量m,利用switch的分支选择功能启动下一个函数—-利用姓名删除功能还是学号删除功能或是选择返回。
同时利用死循环使该功能不断进行下去,直到用户主动退出。
===================================================
for(i=