一、 设计题目(问题)描述和要求
某一中学,现在需要建立学生通讯录管理系统,以管理学生信息。  要求:
(1) 可以录入新的通讯信息(包括姓名,通讯地址,邮编,联系电话等) (2) 可以按照姓名进行查询相关信息 (3) 可以修改相关信息 二、 系统分析与概要设计
根据问题描述和要求,系统要求能够按姓名查找、增加、删除和保存各学生的信息。确定程序应该具备如下功能:“查询学生信息”、“增加学生信息”、“修改学生信息”“删除学生信息”、“数据存盘”基本模块。
系统可以将学生信息数据保存到磁盘文件student.txt,从而可以通过磁盘文件读出学生数据信息,为了便于统计在生成学生信息时同时生成学生编号,这样每输入一个学生信息编号顺序加1,这样也方便了管理员查询学生信息。 三、 详细设计和编码 1. 数据类型定义
根据系统要求,可以将姓名和邮编和联系电话通讯地址定义为字符型。 2. 各模块算法描述
查询学生信息: Que_name()输入要查询的学生姓名,比较名字与保存的信息是否相同,
若相同则查找到,否则,没查找到。
增加学生信息: Add()输入要添加的学生信息并保存。
删除学生信息: Del()输入要删除的学生姓名,若与数据相同则删除,否则输出查找不
到该信息。
修改学生信息: Mod()输入要修改的学生姓名,输入要修改的信息,并确认。 数据存盘: Sav()创建文件,将信息写入文件。 3. 程序关键算法流程图
(1)主函数流程
开始创建学生对象显示菜单接受输入根据输入执行学生操作N退出Y结束某操作算法流程
Student:: Add()
开始学号增加1输入学生通讯地址 联系电话 邮编号创建学生结点学生结点加入链表结束1
(2)
(3) Student:: Del()
开始输入学生学号查找要删除的结点结点存在解除学生结点提示未找到结束4) Student:: Mod()
开始输入学生学号查找学生结点结点存在修改结点提示未找到结束 (5) Student:: Que_name()
2
开始输入学生姓名浏览学生信息 查找结点结点存在浏览学生信息提示未找到结束3
(6) Student:: Sav()
开始打开学生信息保存文件遍历链表保存学生信息关闭文件打开基础数据库文件保存基础数据库信息数据关闭文件结束4
(7) Student:: Load()
开始打开学生数据信息文件读取基础信息数据关闭文件打开学生信息数据文件读取一条学生信息 记录Y文件未结束N根据学生数据类型创建结点链表加入结点读取下一条信息关闭文件结束
四、调试分析 (内容包括:调试过程中遇到的问题并且是如何解决的以及对设计实现的回顾讨论和分析;算法的时空分析和改进设想;经验和体会等)
5
五、 测试结果
小结
通过本次设计,加强了对于编写管理系统程序的运用,能够更好的运用循环。
对于以后的编程运用起了很大的帮助。
七、 附录
(附上带详细注释的源程序) #include6
六、
#include #include using namespace std; struct student {char   num[20];    char  name[20];    char  address[50];    char   postcode[20];    char   telphone[20];
} student[2000];                                            //定义学生类结构体
void Menu();                                              //声明菜单函数 void Input();                                             //声明录入函数 void Sav(int);                                            //声明保存函数
int  Load();                                              //声明信息导入函数 void Que_name();                                          //声明按姓名查找函数 void Del();                                               //声明删除函数 void Mod();                                               //声明修改函数 void Scan();                                              //声明浏览函信息数
void Add();                                               //声明添加函数
void Menu()                                               //菜单函数 {
cout<<\"\*********欢迎来到平顶山学院学生通讯录信息管理系统!*********\"<void main()                                                //主函数的实现 {int n; loop:   Menu();                                          //调用菜单函数   cout<<\"请输入您所要进行的操作过程的序号(1-7):\";   cin>>n;
7
system(\"cls\");      switch(n)    {   case 1:cout<<\"请输入相关学生通讯信息:\"<cout<<\"\\\*********欢迎您的使用!**********\"<void Input()                                             //学生通讯信息录入函数 {int i,m;
cout<<\"请输入您所要输入的学生通讯信息的个数(1-2000):\";    cin>>m;
for (i=0;i> student[i].num;      cout<<\"请输入通讯录中学生的姓名:\" <>student[i].name;   cout<<\"请输入通讯录中学生的电话号码:\"<>student[i].telphone;   cout<<\"请输入通讯录学生的地址(格式如***省**市**县**乡):\"<>student[i].address;   cout<<\"请输入通讯录中学生的邮编:\"<>student[i].postcode;   cout<<\"该学生的通讯信息已经输入完毕,请继续输入下一个学生通讯信息!\"<void Sav(int m)                //如何写入信息? 保存通讯录文件函数 {int i;
FILE *fp;
if ((fp=fopen(\"E:\\\\student.dat\       //创建文件并判断是否能打开    {
cout<<\"该文件打开失败。\"<8}
for (i=0;iif (fwrite(&student[i],sizeof(struct student),1,fp)!=1)  //申请空间,写入学生信息,为何有个1???    {     cout<<\"信息写入失败!\"<void Que_name()                                          {char name1[10];   int i,m;   m=Load();
cout<<\"请输入您要查询学生通讯信息的名字\"<>name1;   for(i=0;iif(strcmp(name1,student[i].name)==0)  {   cout<<\"查找到该学生的通讯信息如下:\"<void Scan() {int i,m;
m=Load();  //不明白这个,把函数赋给m吗?    cout<<\"输出学生通讯信息如下:\"<cout<<\"学号:\"<<int Load()            //按姓名查找函数//导入函数
9
{
FILE*fp;      int i=0;
if((fp=fopen(\"E:\\\\student.dat\         {     cout<<\"文件打开失败!\"<while(feof(fp)==0);      }  return(i);  fclose(fp); }void Del()                                                        //删除函数 {
int m;     int i,j,n,t,f;
char name1[10];  m=Load();
cout<<\"查看学生的通讯信息如下:\"<Scan();                                                       //调用浏览函数     cout<<\"请输入您想删除的通讯信息的名字:\"<>name1;for(f=1,i=0;f&&i>n;        if(n==1)                                           //如果删除,则其他的信息都向前移一行        {          for(j=i;j10{            student[j]=student[j+1];                }          f=0;        }     }  }
if(!f) m=m-1;//???   else cout<<\"抱歉!未找到该生信息。\"<>t;   switch(t)     {    case 1:  Del();break;    case 0:  break;    default : break;     }; }void Mod()                                                    //修改函数 {    char num[20],tel[20],post[20];    char name[20];    char address[50];    int b, c,i,n,t,f;    int m=Load();      //导入文件内的信息    cout<<\"该学生先前的通讯信息为:\"<>name ;    for(f=1,i=0;f&&i>n;    if(n==1)    {     cout<<\"请输入您要修改的项目(1-学号  2-姓名  3-联系电话  4-通讯地11
址  5-邮编):\"<>c;     if(c>6||c<1)     cout<<\"抱歉,您的输入有误,请从新输入。\"<>num;      strcpy(student[i].num,num);      break;      case 2:cout<<\"将该生的姓名改为:\";      cin>>name;      strcpy(student[i].name, name);      break;    case 3:cout<<\"将该生的联系电话改为:\";      cin>>tel;      strcpy(student[i].telphone,tel);      break;    case 4:cout<<\"将该生的通讯地址改为:\";      cin>>address;      strcpy(student[i].address,address);      break;     case 5:cout<<\"将该生的邮编改为:\";      cin>>post;      strcpy(student[i].postcode,post);      break;     }      cout<>b;   } while(b==0);       Sav(m);    cout<<\"修改后所有信息如下;\"<>t;12
switch(t)    {   case 1:  Mod();break;   case 0:  break;   default :break;    } }
void Add()                                                         //添加函数 {     int n=Load();    int i,m;    cout<<\"请输入您要添加的学生通讯信息的个数:\"<>m;      for (i=n;i>student[i].num;      cout<>student[i].name;      cout<>student[i].telphone;         cout<>student[i].address;      cout<<\"请输入该生的邮编:\";      cin>>student[i].postcode;      cout<13