c++同学录程序功能评价

该博客为高校作业要求,程序为网上寻找开源代码,如有侵权即刻删除
作业内容:寻找开源小程序,评论其功能
小程序实现了简单的同学录功能,对于该程序,可以进行对同学信息的增删改查,方便同学之间信息的查询。
程序功能包括:
登录功能:登录该系统时需要输入登录密码,默认的密码是666,可修改登录密码。


数据输入功能:输入的数据包括同学的学号、姓名、姓氏首字母、宿舍、qq 号、电话号码。

删除功能:可以对已经录入的信息进行删除。


显示功能:可以显示当前已经录入的同学信息。


排序功能:同学信息可以按照学号从小到大的顺序排列,也可按姓氏首字母排列。


查找功能:可以根据学号和姓名进行查找个人信息。


修改功能:可以对已经录入的各项个人信息进行修改。


播放音乐功能:该程序实际为同学通讯录,可播放音乐《友谊天长地久》。


文件操作功能:可建立、打开、保存、关闭数据文件。
作者将程序的功能写成如下几个函数:
void Read()//读取文件
void entry()//登录系统,使用密码登陆,并且提供密码的修改,保护了用户信息及方便用户修改信息
void add()//录入学生信息
void deleted()//删除信息
void display1()//显示功能,用于显示运行本次程序所录入的所有学生信息
void display2()//显示功能,读取student.txt文件后,显示student.txt文件中的信息
void sort()//排序功能
int inquire()//查找功能
void revise()//修改功能
函数中作者进行了文件的读写,将各个功能分别写成一个模块,简单明了,构架清晰
在主函数中作者创建了一个简单的用户界面,使用switch分支结构语句,以便进入每个功能
对于音乐播放功能,作者使用#pragma comment(lib, "WINMM.LIB")头文件,调用了PlaySound()函数
我觉得作者的优点在于架构清晰及使用了音乐播放功能,清晰的架构将功能模块写成函数,清楚每一个功能的目的,代码可读性强。
其实还可以在每次操作之后清空屏幕,使用system("cls")将屏幕清空
对于功能实现,也可以将函数写成类,同学的信息也可以写成链表形式,这样封装性更好。
总体而言,该程序对于学过c++的同学很好去理解程序中的代码,作者的架构很值得学习。
#include<iostream>
#include<cstring>
#include<stdio.h>
#include <fstream>
#include <iomanip>
#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib, "WINMM.LIB")
using namespace std;
int sum=0;//全局变量,用于统计当前的总人数
class Student//定义student类
{
public:
friend void Read(char name[],char lastname[],char id[],char dorm[],char qq[],char phone[]);//友元函数,用于读取文件
char name[15]; //姓名
char lastname[15]; //姓氏首字母
char id[15]; //学号
char dorm[15]; //宿舍
char qq[15]; //qq号
char phone[15]; //电话号码
};
Student stu[40];
int mem[40]; //全局数组变量,排序功能要用到
void Read(char name[],char lastname[],char id[],char dorm[],char qq[],char phone[])//读取文件
{
ifstream infile("student.txt",ios::in);
if(!infile)
{
cerr<<" open error"<<endl;
exit(1);
}
for(int i=0; i<10; i++) //只读取存放在数组中 但不对其进行相关操作
{
infile>>name[i]>>lastname[i]>>id[i]>>dorm[i]>>qq[i]>>phone[i];
}
infile.close();
}

void entry()//登录系统
{
int password=666,pw;
int m;
cout<<"\t\t\t*****************\t\t\t\n";
cout<<"\t\t\t*"<<"1.输入登录密码\t*"<<endl;
cout<<"\t\t\t*"<<"2.修改登录密码\t*"<<endl;
cout<<"\t\t\t*****************\t\t\t\n";
cout<<"\t\t请选择:";
cin>>m;
if(1==m)//输入登录密码
{
loop1:
cout<<"\t\t密码:";
cin>>pw;
if(pw==password)
{
cout<<"\t\t登陆成功"<<endl;
}
else
{
cout<<"\t\t密码错误"<<endl;
goto loop1;
}
}
else
{
loop2: //修改登录密码
cout<<"\t\t请输入原密码:";
cin>>pw;
if(pw==password)
{
cout<<"\t\t请输入新密码:";
cin>>password;
cout<<"\t\t密码修改成功"<<endl;
}
else
{
cout<<"\t\t密码输入错误\n";
goto loop2;
}
}
}
void add(Student stu[40])//录入学生信息
{
ofstream outfile("student.txt"); //打开文件
if(!outfile)
{
cerr<<" open error"<<endl;
exit(1); //退出程序
}
int num1,i,temp=sum;
cout<<"请输入要录入多少个同学的信息:";
cin>>num1;
for(i=sum;i<num1+temp;i++)//录入同学信息
{
cout<<"\n输入第"<<i+1<<"个同学的信息:"<<endl;
cout<<"姓名: "; cin>>stu[i].name;
cout<<"姓氏首字母(小写): "; cin>>stu[i].lastname;
cout<<"学号: "; cin>>stu[i].id;
cout<<"宿舍: "; cin>>stu[i].dorm;
cout<<"QQ: "; cin>>stu[i].qq;
cout<<"手机号: "; cin>>stu[i].phone;
mem[i]=i;
sum++;
outfile<<stu[i].name<<"\t"<<stu[i].lastname<<"\t"<<stu[i].id<<"\t"
<<stu[i].dorm<<"\t"<<stu[i].qq<<"\t"<<stu[i].phone<<"\t"<<endl;//写入文件
}
outfile.close();//关闭文件
}
void deleted(Student stu[])//删除信息
{
int i,n;
char ch;
char dename[15];
cout<<"请输入要删除的联系人的姓名:";
cin>>dename;
for(i=0;i<sum;i++)
{
if(strcmp(stu[i].name,dename)==0)//查找联系人信息
{
cout<<"联系人:\n";
cout<<"姓名:"<<stu[i].name<<endl;
cout<<"姓氏首字母:"<<stu[i].lastname<<endl;
cout<<"学号:"<<stu[i].id<<endl;
cout<<"宿舍:"<<stu[i].dorm<<endl;
cout<<"QQ:"<<stu[i].qq<<endl;
cout<<"手机号:"<<stu[i].phone<<endl;
cout<<"是否删除该联系人的信息:(输入y或n,y是n否)";
cin>>ch;
if(ch=='y')
{
for(n=i;n<sum-1;n++)
{
stu[n]=stu[n+1];
}
cout<<"删除成功"<<endl;
sum--;
}
}
else cout<<"联系人不存在"<<endl;
}
}
void display1(Student stu[])//显示功能,用于显示运行本次程序所录入的所有学生信息
{
int i;
cout<<"姓名\t"<<"姓氏\t"<<"学号\t"<<"宿舍\t"<<"QQ\t\t"<<"手机号\t\t"<<endl;
for(i=0;i<sum;i++)
{
cout<<stu[mem[i]].name<<"\t"<<stu[mem[i]].lastname<<"\t"<<stu[mem[i]].id<<"\t"<<
stu[mem[i]].dorm<<"\t"<<stu[mem[i]].qq<<"\t"<<stu[mem[i]].phone<<"\t"<<endl;
}
}
void display2(Student stu[])//显示功能,读取student.txt文件后,显示student.txt文件中的信息
{
char name[15],lastname[15],id[15],dorm[15],qq[15],phone[15];
Read(name, lastname, id, dorm, qq,phone); //先读取
int i;
cout<<"姓名\t"<<"姓氏\t"<<"学号\t"<<"宿舍\t"<<"QQ\t\t"<<"手机号\t\t"<<endl;
for(int i=0;i<10;i++)
{
cout<<name[i]<<"\t";
cout<<lastname[i]<<"\t";
cout<<id[i]<<"\t";
cout<<dorm[i]<<"\t";
cout<<qq[i]<<"\t";
cout<<phone[i]<<endl;
}
}
void sort(Student stu[])//排序功能
{
int ch,i,m,t;
cout<<"选择功能:"<<endl;
cout<<"1.按学号从小到大排序:\n"<<"2.按姓名首字母排序"<<endl;
cin>>ch;
if(1==ch)
{
for(i=0;i<sum;i++)//冒泡法排序
for(m=i;m<sum-1;m++)
{
if(stu[mem[i]].id>stu[mem[m+1]].id)
{
t=mem[i];
mem[i]=mem[m+1];
mem[m+1]=t;
}
}
//调用display()函数,显示信息
}
else
{
for(i=0;i<sum;i++)
for(m=i;m<sum-1;m++)
{
if(stu[mem[i]].lastname<stu[mem[m+1]].lastname)
{
t=mem[i];
mem[i]=mem[m+1];
mem[m+1]=t;
}
}
display1(stu);
}
}
int inquire(Student stu[])//查找功能
{
int cha,i;
char stuid[15],stuname[15];
cout<<"1.按学号查找\n"<<"2.按姓名查找"<<endl;
cin>>cha;

if(1==cha)
{

cout<<"请输入学号:"<<endl;
cin>>stuid;
for(i=0;i<sum;i++)
{
if(strcmp(stu[i].id,stuid)==0)
{
cout<<"姓名\t"<<"姓氏\t"<<"学号\t"<<"宿舍\t"<<"QQ\t\t"<<"手机号\t\t"<<endl;
cout<<stu[i].name<<"\t"<<stu[i].lastname<<"\t"<<stu[i].id<<"\t"<<
stu[i].dorm<<"\t"<<stu[i].qq<<"\t"<<stu[i].phone<<"\t"<<endl;
}
else cout<<"查找成功"<<endl;
}
}
else
{
cout<<"请输入姓名:"<<endl;
cin>>stuname;
for(i=0;i<sum;i++)
if(strcmp(stu[i].name,stuname)==0)
{
cout<<"姓名\t"<<"姓氏\t"<<"学号\t"<<"宿舍\t"<<"QQ\t\t"<<"手机号\t\t"<<endl;
cout<<stu[i].name<<"\t"<<stu[i].lastname<<"\t"<<stu[i].id<<"\t"<<
stu[i].dorm<<"\t"<<stu[i].qq<<"\t"<<stu[i].phone<<"\t"<<endl;
}
else cout<<"查找成功"<<endl;
}
return i-1;
}
void revise(Student stu[])//修改功能
{
int chb,xu;
cout<<"请先查找联系人:"<<endl;
xu=inquire(& stu[40]);
cout<<"请输入要修改哪个信息:"<<endl;
cout<<"1.姓名\n"<<"2.姓氏首字母(小写)\n"<<"3.学号\n";
cout<<"4.宿舍\n"<<"5.QQ\n"<<"6.手机号"<<endl;
cin>>chb;
switch(chb)//选择修改哪种信息
{
case 1:
cin>>stu[xu].name;
break;
case 2:
cin>>stu[xu].lastname;
break;
case 3:
cin>>stu[xu].id;
break;
case 4:
cin>>stu[xu].dorm;
break;
case 5:
cin>>stu[xu].qq;
break;
case 6:
cin>>stu[xu].phone;
break;
}
cout<<"修改成功!!"<<endl;
}
int main()
{
int choice;
entry();//登录系统
loop://主菜单
cout<<"\t\t*******班级同学信息管理程序*******\n";
cout<<"\t\t* 1.加入同学信息 *\n";
cout<<"\t\t* 2.删除同学信息 *\n";
cout<<"\t\t* 3.显示同学信息 *\n";
cout<<"\t\t* 4.排序信息 *\n";
cout<<"\t\t* 5.查找信息 *\n";
cout<<"\t\t* 6.修改信息 *\n";
cout<<"\t\t* 7.播放音乐 *\n";
cout<<"\t\t* 8.退出程序 *\n";
cout<<"\t\t**********************************\n";
cout<<"请选择功能:";
cin>>choice;
switch(choice)
{
case 1:
add(stu);//录入同学信息
goto loop;
case 2:
deleted(stu);//删除同学信息
goto loop;
case 3:
int choose;
cout<<"\t\t1.显示本次运行程序录入的信息"<<endl;
cout<<"\t\t2.显示上次运行程序录入的信息"<<endl;
cout<<"\t\t请选择:";
cin>>choose;
if(1==choose)
display1(stu);//显示信息
else
display2(stu);//显示student.txt文件中的信息
goto loop;
case 4:
sort(stu);//排序
goto loop;
case 5:
inquire(stu);//查找
goto loop;
case 6:
revise(stu);//修改
goto loop;
case 7:
cout<<"正在播放<<友谊地久天长>>"<<endl;
PlaySound(TEXT("沈小岑 - 友谊地久天长.wav"),NULL,SND_FILENAME);//播放音乐
case 8:
return 0;

}
}

posted @ 2019-03-04 10:13  乌兰巴托海军总司令  阅读(386)  评论(0编辑  收藏  举报