资源描述
课程设计汇报
课程设计题目: 学生信息管理系统
学生姓名: 张鹏
专 业: 软件工程(嵌入式)
班 级: 1621806
指导老师: 高 永 平
6 月 9 日
目录
一、需求分析: 2
二、总体设计: 2
三、具体设计。 3
四、测试结果。 12
五、软件操作使用说明书。 17
六、总结。 17
七、代码: 17
一、需求分析:
依据对学生信息管理需要,建立一个“学生信息管理系统”,以方便对学生信息数据录入、修改、删除和查询功效。、
要求完:
1.有菜单界面能够对功效进行选择;
2.能录入姓名、性别、学号、班级和电话号码等学生信息并保留到文件中;
3.能依据学生学号进行排序;
4.能依据学生学号对学生信息进行修改;
5.能依据学生学号对学生信息进行删除;
6.能依据学生学号、姓名和班级等对学生信息进行查询;
7.能依据班级对学生人数进统计。
二、总体设计:
依据以上分析,本系统关键包含:
1.从键盘录入学生个人信息,并保留到文件中;
2.按学号对学生信息进行排序
3.按学号对学生信息进行修改;
4.按学号对学生信息进行删除;
5.按学号对学生信息进行查询;
6.按姓名对学生信息进行查询;
7.按班级对学生信息进行查询;
8.结束目前途序;
等8大功效,系统关键定义了1个类和16个函数以实现各个功效:
(1)主函数main():调用录入、查找、修改、排序、统计、删除等函数对学生组员信息进行处理。
(2)定义类class student:用于定义组员结构体数组。
(3)类中结构函数student():对类中各项私有组员进行传值。
(4)类中输入运算符重载函数operator >>():方便对类对象输入。
(5)类中输出运算符重载函数operator <<():方便对类对象输出。
(6)获取函数getnum():方便在类外对类中私有组员num数据进行调用。
(7)获取函数getname():方便在类外对类中私有组员name数据进行调用。
(8)获取函数getban():方便在类外对类中私有组员ban数据进行调用。
(9)录入函数 enter():从键盘输入学生个人信息,并保留到文件中。
(10)查找函数 search_num():按学号查找学生个人信息。
(11)查找函数 search_name():按姓名查找学生个人信息。
(12)查找函数 search_ban():按班级查找学生个人信息。
(13)修改函数 changr():按学号修改学生个人信息,保留文件中。
(14)删除函数 del():按学号删除学生个人信息,保留到文件中。
(15)排序函数sort():按学号对学生个人信息进行排序。
(16)统计函数count():按班级对学生人数进行统计。
程序功效结构图图1所表示:
学生信息管理系统
键 盘 输 入
保 存 数 据
学 号 排 序
信 息 修 改
信 息 删 除
学 号 查 询
班 级 查 询
人 数 统 计
姓 名 查 询
图1程序功效结构图图
三、具体设计。
本系统有一个主函数,8个功效模块,每个功效模块函数全部是由主函数调用,分别说明以下:
(1)主函数main():
调用录入、查找、修改、排序、统计、删除等函数对学生组员信息进行处理。
主函数步骤图图2所表示:
开 始
输出菜单
输入操作选择c
c=0
c=8
c=7
c=6
c=5
c=3
c=2
c=1
退
出
系统
保留数据
输入数据
学号排序
信息修改
信息删除
学号查询
姓名查询
统计人数
班级查询
c=4
继续操作否
Y
N
结束
图2主函数步骤图
(2)键盘输入函数步骤图:
从键盘输入学生个人信息,并保留到文件中。
步骤图图3所表示:
开 始
输入学生个人信息
是否继续
结束
输入学生人数
保留数据到文件中
Y
N
图3键盘输入函数步骤图
(3)排序函数步骤图:
按学号对学生个人信息进行排序。
步骤图图4所表示:
开 始
是否继续
结束
按学号进行学排序
输出排序完成后信息
N
Y
图4排序函数步骤图
(4)信息修改函数步骤图:
由用户输入需要修改组员学号,在现有学生信息中查询是否有此学生信息存在,查到输出该学生全部信息,没查到则输出“学号为XX学生不存在!”信息。
步骤图图5所表示:
开 始
输出不存在组员信息信息
打开文件
输入组员学号
查询到否
输出查到组员信息信息
输入修改组员信息信息
关闭文件
结束
图5信息修改函数步骤图
(5)信息删除函数步骤图:
由用户输入需要删除组员学号,在现有学生信息中查询是否有此学生信息存在,查到删除该学生全部信息,没查到则输出“学号为XX学生不存在!”信息。
步骤图图6所表示:
开 始
打开文件
查询到否
关闭文件
结束
Y
删除此学生信息
N
输入不存在信息
读入学生信息
输入删除学号
图6信息删除函数步骤图
(6)学号查询函数步骤图:
由用户输入需要查询组员学号,在现有学生信息中查询是否有此学生信息存在,查到输出该学生全部信息,没查到则输出“学号为XX学生不存在!”信息。
步骤图图7所表示:
开 始
打开文件
输出不存在学生信息
结束
关闭文件
查询到否
输入学生学号
N
输出查到学生信息信息
Y
图7学号查询函数步骤图
(7)姓名查询函数步骤图:
由用户输入需要查询组员姓名,在现有学生信息中查询是否有此学生信息存在,查到输出该学生全部信息,没查到则输出“姓名为XX学生不存在!”信息。
步骤图图8所表示:
开 始
打开文件
输出不存在学生信息
结束
关闭文件
查询到否
输入学生姓名
N
输出查到学生信息信息
Y
图8姓名查询函数步骤图
(8)班级查询函数步骤图:
由用户输入需要查询组员班级,在现有学生信息中查询是否有此学生信息存在,查到输出该学生全部信息,没查到则输出“班级为XX学生不存在!”信息。
步骤图图9所表示:
开 始
打开文件
输出不存在该班级学生
结束
关闭文件
查询到否
输入学生班级
N
输出查到学生信息信息
Y
图9班级查询函数步骤图
(9)按班级统计函数步骤图:
由用户输入需要查询组员班级,在现有学生信息中查询是否有此学生信息存在,查到即对该班级人数进行统计,没查到则输出“班级为XX学生不存在!”信息。
步骤图图10所表示:
开 始
打开文件
输出不存在该班级学生
结束
关闭文件
查询到否
输入学生班级
N
输出该班级人数
Y
图10按班级统计函数步骤图
四、测试结果。
(1)程序运行主菜单图11所表示:
图11
(2)从键盘上输入学生人数和学生信息图12所表示:
图12
(3)按学号修改图13所表示:
图13
(4)按学号删除图14:
图14
(5)按学号查找图15:
图15
(6)按姓名查找图16:
图16
(7)按班级查找图17:
图17
(8)按班级统计人数图18:
图18
(9)按学号进行排序图19:
图19
五、软件操作使用说明书。
本软件采取命令行对话方法进行操作,运行后出现主界面如上图所表示,然后按菜单提醒操作即可。
六、总结。
经过一个星期不停上机实践练习,我对c++有了更深入认识和了解,学好它重在实践,要经过不停上机操作不停进行操作和试运行才能愈加好地掌握它,经过这次实践,我发觉了自己很多不足:我对多种循环了解深度还不够,对字符组员调用还不是很熟练,对指针了解还是不透彻,和对处理问题想法不够全方面。这些不足,在这次实践中全部有所提升,而且对这些不足我全部会在后续学习中努力补足。
七、代码:
#include<iostream>
#include<fstream>
#include<cstring>
#define M 5000
using namespace std;
class student
{
public:
student(){}
student(char na[10],char se[10],int n,int b,char t[12]):num(n),ban(b)
{
strcpy(sex,se);
strcpy(name,na);
strcpy(tel,t);
}
friend istream & operator >>(istream & is,student & s)
{
is>>s.name>>s.sex>>s.num>>s.ban>>s.tel;
return is;
}
friend ostream & operator <<(ostream & os,student & s)
{
os<<s.name<<" "<<s.sex<<" "<<s.num<<" "<<s.ban<<" "<<s.tel<<endl;
return os;
}
int getnum()
{
return num;
}
int getban()
{
return ban;
}
char *getsex()
{
char *s=new char[strlen(sex)];
s=sex;
return s;
}
char *getname()
{
char *p=new char[strlen(name)];
p=name;
return p;
}
char *gettel()
{
char *t=new char[strlen(tel)];
t=tel;
return t;
}
private:
char name[10];
char sex[10];
int num,ban;
char tel[12];
};
int menu()
{
char s[80];
int c;
cout<<"************************** 主 菜 单 ***************************"<<endl<<endl;
cout<<" | 0.退出目前途序 | \n"<<endl;
cout<<" | 1.输入学生信息 | \n"<<endl;
cout<<" | 2.依据学号查询 | \n"<<endl;
cout<<" | 3.依据姓名查询 | \n"<<endl;
cout<<" | 4.依据班级查询 | \n"<<endl;
cout<<" | 5.依据学号排序 | \n"<<endl;
cout<<" | 6.按班级计人数 | \n"<<endl;
cout<<" | 7.依据学号删除 | \n"<<endl;
cout<<" | 8.依据学号修改 | \n"<<endl;
cout<<"-----------------------------------------------------------------------------"<<endl;
cout<<" 输入您菜单选项编号(0-8):"<<endl;
cout<<" Designed by Peng"<<endl;
for(;;)
{
gets(s);
c=atoi(s);
if(c>8)
cout<<"输入错误,请重新输入!:";
else
break;
}
return c;
}
int enter(student t[])
{
int i,n;
system("cls");
cout<<" 请输入学生信息条数"<<endl;
cin>>n;
cout<<" 请输入学生信息\n"<<endl;
cout<<"姓名 性别 学号 班级 联络电话"<<endl;
fstream fs;
fs.open("c:\\item.txt",ios::out);
for(i=0;i<n;i++)
{
cin>>t[i];
fs<<t[i];
}
fs.close();
getchar();
return n;
}
void search_num(student t[],int n)
{
int i,nu,temp=-1000;
system("cls");
cout<<"请输入查找学生学号:"<<endl;
cin>>nu;
for(i=0;i<n;i++)
{
if(nu==t[i].getnum())
{
cout<<"该学生信息为:"<<endl<<"姓名 性别 学号 班级 联络电话"<<endl;
cout<<t[i];
temp=i;
}
}
if(temp==-1000)
cout<<endl<<endl<<"学号为 "<<nu<<" 学生不存在!"<<endl;
getchar();
}
void search_ban(student t[],int n)
{
int i,ba,temp=-1000;
system("cls");
cout<<"请输入查找学生班级号:"<<endl;
cin>>ba;
cout<<"该学生信息为:"<<endl<<"姓名 性别 学号 班级 联络电话"<<endl;
for(i=0;i<n;i++)
{
if(ba==t[i].getban())
cout<<t[i];
temp=i;
}
if(temp==-1000)
cout<<endl<<endl<<"班级为 "<<ba<<" 学生不存在!"<<endl;
getchar();
}
void search_name(student t[],int n)
{
int i,temp=-1000;
char na[20];
system("cls");
cout<<"请输入查找学生姓名:"<<endl;
cin>>na;
for(i=0;i<n;i++)
{
if(strcmp(na,t[i].getname())==0)
{
cout<<"该学生信息为:"<<endl<<"姓名 性别 学号 班级 联络电话"<<endl;
cout<<t[i];
temp=i;}
}
if(temp==-1000)
cout<<endl<<endl<<"姓名为 "<<na<<" 学生不存在!"<<endl;
getchar();
}
void sort(student t[],int n)
{
student p;int s;
system("cls");
cout<<"请选择升序或降序(1或2):"<<endl;
cin>>s;
if(s==1)
{cout<<"按学号排序(升序)完成以下:"<<endl;
for(int i=0;i<n-1;i++)
{for(int j=0;j<n-1-i;j++)
{
if(t[j].getnum()>t[j+1].getnum())
{
p=t[j];
t[j]=t[j+1];
t[j+1]=p;
}
}
}
cout<<"姓名 性别 学号 班级 联络电话"<<endl;
for(int a=0;a<n;a++)
{
cout<<t[a];
}
}
if(s==2)
{cout<<"按学号排序(降序)完成以下:"<<endl;
for(int i=0;i<n-1;i++)
{for(int j=0;j<n-1-i;j++)
{
if(t[j].getnum()<t[j+1].getnum())
{
p=t[j];
t[j]=t[j+1];
t[j+1]=p;
}
}
}
cout<<"姓名 性别 学号 班级 联络电话"<<endl;
for(int a=0;a<n;a++)
{
cout<<t[a];
}
}
getchar();
}
void count(student t[],int n)
{
int i,c,temp=-1000;
system("cls");
fstream fs;
fs.open("c:\\item.txt",ios::in);
cout<<"请输入想统计人数班级:"<<endl;
cin>>c;
int s=0;
for(i=0;i<n;i++)
{
fs>>t[i];
if(c==t[i].getban())
{
s++;
temp=i;
}
}
cout<<"该班级人数为:"<<s<<endl;
fs.close();
if(temp==-1000)
cout<<endl<<endl<<"班级为 "<<c<<" 学生不存在!"<<endl;
getchar();
}
void change(student t[],int n)
{
int id,i,temp=-1000,run=0;
system("cls");
cout<<"请输入要修改学生学号:"<<endl;
cin>>id;
fstream fs;
fs.open("c:\\item.txt",ios::in|ios::out);
for(i=0;i<n;i++)
{
if(id==t[i].getnum())
{
cout<<"修改前该学生信息为:"<<endl<<"姓名 性别 学号 班级 联络电话"<<endl;
cout<<t[i];
temp=i;
run=;}
}
fs.close();
if(run==)
{fs.open("c:\\item.txt",ios::in|ios::out);
cout<<"请输入你修改该学生信息为:"<<endl<<"姓名 性别 学号 班级 联络电话"<<endl;
cin>>t[i];
fs<<t[i];
fs.close();
cout<<"修改成功!"<<endl;}
if(temp==-1000)
cout<<endl<<endl<<"姓名为 "<<id<<" 学生不存在!"<<endl;
getchar();
}
int del(student t[],int n)
{
int ber,temp=-1000,run=0;
int i,j,nu;
system("cls");
cout<<"请输入要删除学生学号:"<<endl;
cin>>ber;
for(i=0;i<n;i++)
{
if(ber==t[i].getnum())
{
temp=i;
run=;
}
}
if(run==)
{
cout<<"删除中........"<<endl;
cout<<"删除后数据为:"<<endl<<"姓名 性别 学号 班级 联络电话"<<endl;
}
fstream fs;
fs.open("c:\\item.txt",ios::out);
for(int x=0;x<n;x++)
{
if(ber==t[x].getnum())
{
for(j=0;j<n;j++)
{
if(j==x)
continue;
else
fs<<t[j];
cout<<t[j];
}
}
}
nu=n-1;
fs.close();
if(temp==-1000)
cout<<endl<<endl<<"学号为 "<<ber<<" 学生不存在!"<<endl;
getchar();
return nu;
}
void main()
{
student s[M];
int length;
for(;;)
{
system("cls");
switch(menu())
{
case 0:exit(0);break;
case 1:length=enter(s);break;
case 5:sort(s,length);break;
case 8:change(s,length);break;
case 7:length=del(s,length);break;
case 2:search_num(s,length);break;
case 3:search_name(s,length);break;
case 4:search_ban(s,length);break;
case 6:count(s,length);break;
}
cout<<"按回车返回主菜单.."<<endl;
getchar();
}
return;
}
展开阅读全文