程序设计报告南京邮电大学学生管理系统 c语言.docx

上传人:b****3 文档编号:10816676 上传时间:2023-05-27 格式:DOCX 页数:25 大小:31.70KB
下载 相关 举报
程序设计报告南京邮电大学学生管理系统 c语言.docx_第1页
第1页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第2页
第2页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第3页
第3页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第4页
第4页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第5页
第5页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第6页
第6页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第7页
第7页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第8页
第8页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第9页
第9页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第10页
第10页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第11页
第11页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第12页
第12页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第13页
第13页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第14页
第14页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第15页
第15页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第16页
第16页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第17页
第17页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第18页
第18页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第19页
第19页 / 共25页
程序设计报告南京邮电大学学生管理系统 c语言.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

程序设计报告南京邮电大学学生管理系统 c语言.docx

《程序设计报告南京邮电大学学生管理系统 c语言.docx》由会员分享,可在线阅读,更多相关《程序设计报告南京邮电大学学生管理系统 c语言.docx(25页珍藏版)》请在冰点文库上搜索。

程序设计报告南京邮电大学学生管理系统 c语言.docx

程序设计报告南京邮电大学学生管理系统c语言

程序设计报告

 

题目:

学生信息管理系统

 

专业电子信息科学与技术

学生姓名孟祥熙

班级学号B08020221

指导教师王蔚

指导单位南京邮电大学

日期2009/5/20

教师评语

 

教师签名:

年月日

成绩评定

备注

一、课题名称

学生信息管理系统

二、课题内容和要求

(一)程序设计任务:

已知有20个学生记录(包括学号、姓名、成绩)的文件student.dat,所有学生以学号从小到大排序(该文件自行建立)。

要求编程序实现查询、排序、插入、删除诸功能。

(二)系统必须提供的基本功能:

A.要求显示如下界面

****************************************

1--------------查询

2--------------排序

3--------------插入

4--------------删除

****************************************

通过选择1-4来确定要做哪一个操作。

B.若选1,则出现如下界面

****************************************

1.1----------按学号查询

1.2----------按姓名查询

1.3----------按成绩查询

****************************************

通过选择1.1-1.3来确定要做哪一个操作,其中:

按学号查询用二分法实现;按姓名查询用顺序法实现;按成绩查询实现查询成绩小于m分的学生;找到该生将学生记录输出到屏幕,若查无此人,输出相关信息。

C.若选2,则按成绩从大到小排序,姓名,学号顺序也随之调整。

D.若选3,将一个新学生记录按学号顺序插入,并把结果保存到文件student.dat中。

E.若选4,删除指定学生的记录,并把结果保存到文件student.dat中。

F.以上各个功能均编写成子函数,由主函数调用实现。

三、需求分析

查询功能:

按学号查询用二分法实现;

按姓名查询用顺序法实现;

按成绩查询实现查询成绩小于m分的学生;

找到该生将学生记录输出到屏幕,若查无此人,输出相关信息。

排序功能:

按成绩从大到小排序,姓名,学号顺序也随之调整,并把结果保存到文件student.dat中。

插入功能:

将一个新学生记录按学号顺序插入,并把结果保存到文件student.dat中。

删除功能:

删除指定学生的记录,并把结果保存到文件student.dat中。

菜单功能:

包含不同菜单,以显示不同功能。

 

四、概要设计

classStudent

{

charnum[10];用字符数组保存学生学号

charname[10];用字符数组保存学生姓名

intscore;用整形变量保存成绩

public:

Student(char*nu="",char*na="",ints=0);构造函数

voiddisp();打印所有学生的信息

boolfindna(charn[]);检查输入的姓名与学生姓名是否一致

boolfindsc(intn);检查输入分数与学生数分是否一致

friendvoiddelnum(inti,fstream&f);友元函数删除指定位置的学生信息

friendvoidpaisco(fstream&f);友元函数按分数排序

friendvoidchanu(fstream&f,char*nu,char*na,ints);友元函数插入输入的学生信息

friendvoidfindnum(charnum[],fstream&f,inti);友元函数查找与输入学号相符的学生,并可以由i值判断是否接入delnum已删除查找出来的学生信息

};

voidfindsco(intsco,fstream&f);按学号查找并输出学生信息,其中与类中的boolfindsc(intn)配合,保持了程序中学生信息的不可见性

voidfindnam(charnam[],fstream&f,inti)与类中的boolfindna(charn[]);结合,保持程序中学生信息不可见性,并可以有i值判断是否接入delnum已删除查找出来的学生信息

voidCreatefile(char*filename)创建初始文件,包含20个学生信息,在引用的时候加入如下语句

cout<<"是否恢复数据?

(Y/N)";

cin>>i;

if(i=='y'||i=='Y')

{

Createfile("student.dat");

count=20;

cout<<"已恢复原始数据!

";

getch();

}可以让执行程序的人回复数据,相当于rest键

voidmenu3(void)//显示删除菜单

voidmenu2(void)//显示主菜单

voidmenu1(void)//显示查找学生菜单

voidfind(fstream&f);查找学生的总函数,分配不同输入的选项接入姓名,学号,成绩不同的函数以查询,并实现退出,返回上一菜单功能

voiddel(fstream&f)删除学生的总函数,分配不同的输入选项接入findnu,与findna,并由后两者查找出学生位置后调用delnum删除

voidmainmenu(fstream&f)主菜单函数,实现接入find,del,chanu函数并实现退出功能

intmain(void)建立文件流对象,并实现有选择的创建预存的学生数据的dat文件

五、详细设计

#include

#include

#include

#include

usingnamespacestd;

#definemax100

intcount=0;

//类区

classStudent

{

charnum[10];

charname[10];

intscore;

public:

Student(char*nu="",char*na="",ints=0);

voiddisp();

boolfindna(charn[]);

boolfindsc(intn);

friendvoiddelnum(inti,fstream&f);

friendvoidpaisco(fstream&f);

friendvoidchanu(fstream&f,char*nu,char*na,ints);

friendvoidfindnum(charnum[],fstream&f,inti);

};

Student:

:

Student(char*nu,char*na,ints)

{

strcpy(num,nu);

strcpy(name,na);

score=s;

}//构造函数

voidStudent:

:

disp()

{

cout<<"________________________________________"<

"<

"<

"<

}

 

constintNUM=sizeof(Student);

boolStudent:

:

findna(charn[])//namesearch

{

if(strcmp(name,n)==0)

{

returntrue;

}else

returnfalse;

}

boolStudent:

:

findsc(intn)

{

if(score<=n)

returntrue;

else

returnfalse;

}

 

//功能区

voidfindsco(intsco,fstream&f);

voidCreatefile(char*filename)

{

ofstreamout(filename);

Studentstu[20]={Student("B08020211","乔旭",81),Student("B08020212","朱飞林",82),Student("B08020213","朱沛贤",83),Student("B08020214","朱磊",84),Student("B08020215","吴建",85),Student("B08020216","李舜",86),Student("B08020217","沈金伟",87),Student("B08020218","陆向阳",88),Student("B08020219","陈亮",89),Student("B08020220","周明源",90),Student("B08020221","孟祥熙",91),Student("B08020222","姚明",92),Student("B08020223","费伟恒",93),Student("B08020224","徐鹏",94),Student("B08020225","赵以国",95),Student("B08020226","谈亦商",96),Student("B08020227","唐奔",97),Student("B08020228","曹振",99),Student("B08020229","黄波",98),Student("B08020230","程龙",99)};

out.write((char*)stu,sizeof(Student)*20);

out.close();

:

:

count=20;

}//建立文件

voidchanu(fstream&f,char*nu,char*na,ints)

{

Studentstu[max];

inta,b,flag=0;

f.seekg(0,ios:

:

beg);

f.read((char*)&stu,sizeof(Student)*count);

stu[count+1]=Student("","",0);

for(b=0;b

{

if(strcmp(stu[b].num,nu)>0)

{

break;

}

}

a=b;

while(a>=b)

{

strcpy(stu[a+1].num,stu[a].num);

strcpy(stu[a+1].name,stu[a].name);

stu[a+1].score=stu[a].score;

a--;

}

strcpy(stu[b].num,nu);

strcpy(stu[b].name,na);

stu[b].score=s;

f.seekg(0,ios:

:

beg);

f.write((char*)stu,sizeof(Student)*count+1);

system("cls");

count++;

findsco(100,f);

}

voidpaisco(fstream&f)

{

Studentstu[max];

inta,b,i,temp;

chartempna[20],tempnu[10];

f.seekg(0,ios:

:

beg);

f.read((char*)&stu,sizeof(Student)*count);

for(a=0;a

{

for(b=0;b

if(stu[b].score

{

strcpy(tempna,stu[b+1].name);

strcpy(stu[b+1].name,stu[b].name);

strcpy(stu[b].name,tempna);

strcpy(tempnu,stu[b+1].num);

strcpy(stu[b+1].num,stu[b].num);

strcpy(stu[b].num,tempnu);

temp=stu[b+1].score;

stu[b+1].score=stu[b].score;

stu[b].score=temp;

}

}

system("cls");

cout<<"排序完成!

"<

getch();

for(i=0;i

{

stu[i].disp();

cout<

}

}//按分数大小排序

voiddelnum(inti,fstream&f)

{

chara;

Studentstu[max];

cout<<"确认删除?

(Y/N):

";

cin>>a;

system("cls");

if(a=='Y'||a=='y')

{

f.seekg(0,ios:

:

beg);

f.read((char*)&stu,sizeof(Student)*count);

while(i

{

strcpy(stu[i-1].num,stu[i].num);

strcpy(stu[i-1].name,stu[i].name);

stu[i-1].score=stu[i].score;

i++;

}

f.seekg(0,ios:

:

beg);

f.write((char*)stu,sizeof(Student)*(count-1));

cout<<"该学生资料已删除"<

count--;

}

else

cout<<"学生资料未删除"<

findsco(100,f);

getch();

}//按指定位置删除;

voidfindnum(charnum[],fstream&f,inti)

{

Studentstu[max];

intj=0,low=0,high=count-1,m;

intflag=0;

f.seekg(0,ios:

:

beg);

f.read((char*)&stu,sizeof(Student)*count);

while(low<=high)

{

m=(low+high)/2;

if(strcmp(stu[m].num,num)==0)

{

j=m+1;

flag=1;

stu[m].disp();

}

if(strcmp(stu[m].num,num)<0)

{

low=m+1;

}

elsehigh=m-1;

}//二分法查找学生学号

 

if(!

flag)

{

cout<<"查无此人!

"<

}

if(i)

{

delnum(j,f);

}

}//1.1,学号查找

 

voidfindnam(charnam[],fstream&f,inti)

{

Studentst;

intm=0;

f.seekg(0,ios:

:

beg);

boolfd=false;

while(!

f.eof()&&!

fd)

{

f.read((char*)&st,NUM);

if(fd=st.findna(nam))

{

st.disp();

}

m++;

}

if(!

fd)

cout<<"查无此人!

"<

if(i)

{

delnum(m,f);

}

}//1.2namesearch

voidfindsco(intsco,fstream&f)

{

Studentstu[max];

intflag=0,i;

f.seekg(0,ios:

:

beg);

f.read((char*)&stu,NUM*count);

for(i=0;i

{

if(stu[i].findsc(sco))

{

stu[i].disp();

flag=1;

}

}

if(!

flag)

cout<<"查无此人!

"<

}//1.3scoresearch

//菜单区

voidmenu3(void)//删除菜单

{

cout<<"________________________________________"<

";

}

voidmenu2(void)//主菜单

{

cout<<"________________________________________"<

";

}

voidmenu1(void)//主菜单1.1

{

cout<<"________________________________________"<

";

}

//////////////////////////////////////////////////

///////////////////////菜单项/////////////////////

/////////////////////////////////////////////////

voidfind(fstream&f);

voiddel(fstream&f)

{

while

(1)

{

system("cls");

menu3();

chari,a,m[20],n[20];

cin>>i;

if(i=='4')

{

cout<<"任意键退出,按“1”键返回。

";

cin>>a;

if(a=='1')

{

continue;

}

else

system("cls");

cout<<"感谢使用!

"<

exit(0);

}

switch(i)

{

case'1':

cout<<"学号:

";

cin>>n;

system("cls");

findnum(n,f,1);

getch();

break;

case'2':

cout<<"姓名:

";

cin>>m;

system("cls");

findnam(m,f,1);

getch();

break;

case'3':

system("cls");

find(f);

break;

default:

system("cls");

cout<<"输入错误,请重新选择!

"<

getch();

}

}

}

 

voidmainmenu(fstream&f)

{

while

(1)

{

system("cls");

menu1();

charn,a,b,nu[20],na[20];

ints;

cin>>n;

if(n=='5')

{

cout<<"任意键退出,按“1”键返回。

";

cin>>a;

if(a=='1')

{

continue;

}

else

system("cls");

cout<<"感谢使用!

"<

getch();

system("cls");

cout<<"****************************************"<

孟祥熙"<

通信与信息工程学院"<

电子信息科学与技术"<

B08020221"<

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

当前位置:首页 > 初中教育 > 政史地

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

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