主题:习题~求助啊!!!
以前没接触过,可是觉得软件应该很有前途,所以报的这个软件专业,现在有题不会,希望大家可以帮帮我,谢谢~
1、数据结构描述
1)程序设计中要求至少使用以下的数据结构:
①基本类型数据;
②数组类型;
③指针类型;
④结构体类型;
⑤文件类型。
2)必备的数据结构说明如下:
①符号常量:N,用来说明通讯录能容纳的最大记录数,其具体值规定为200;
②定义结构体类型标识符ADDRESS,用来定义该类型的结构体变量、数组和指针,该结构体包括以下数据成员:
char name[9]; /*姓名*/
char sex[3]; /*性别*/
int age; /*年龄*/
char tele[3][13]; /*电话,包括:家庭、单位、手机*/
char group[5]; /*分组,包括:家人、同事、同学、朋友、其他等*/
char address[40]; /*联系地址*/
char postalcode[7]; /*邮政编码*/
③4个外部变量:
temp[N]:为ADDRESS类型的结构体数组,用来存放从数据文件address.dat中读出的记录,以便各函数使用;
field[9][11]={"姓名","性别","年龄","家庭电话","单位电话","手机","关系","联系地址","邮政编码"}:为二维字符数组,用于记录输入、添加、修改、删除等操作的信息提示;
relation[5][5]={"家人","同事","同学","朋友","其他"}:为二维字符数组,用于记录输入、添加、修改等操作的选择项提示;
piece:为int类型的计数器,用来记录记录数,可供各函数使用。
2、系统总体功能(参见附件)
(手机)通讯录管理系统应具备以下功能:
①系统初始化:显示欢迎语:“欢迎使用通讯录管理系统!”和“按任意键系统开始初始化,显示通讯录!”,完成将从数据文件address.dat中读出的记录送入结构体数组temp(如果该文件中不存在记录,要求用户输入),以便程序运行过程中由其他函数使用;显示通讯录;返回通讯录含记录的条数;
②添加记录:向通讯录添加新记录;
③修改记录:修改通讯录中的记录;
④删除记录:删除通讯录中的记录;
⑤按姓名排序:显示通讯录中按姓名排序的记录;
⑥按姓名查询:显示通讯录中按姓名查询得到的记录;
⑦快速查询:显示通讯录中按姓名通过快速查询得到的记录;
⑧退出系统:将记录数据写入磁盘文件,显示结束语,退出系统。
3、系统中使用的各函数说明
以下是系统中使用的各个函数,各函数的名称、返回值类型、函数参数的类型、个数、顺序、功能均已给定,请按此来编写相应的函数。
⑴初始化函数int initializtion(void):完成如上所述的初始化功能,仅由主函数调用;
⑵输入记录函数int enter(void):完成对初始记录的输入,仅由初始化函数调用;
⑶查找函数int seek(char same[]):由输入一条记录函数input、修改记录函数update调用,目的是避免数据记录中存在同名记录。函数参数为用户输入的姓名,函数返回值为1(找到)或0(没找到);
⑷输入一条记录函数void input(ADDRESS *p):由输入记录函数enter、添加记录函数append调用。输入各数据项时需要在屏幕上显示相应数据项的提示,如:输入家庭电话时,屏幕上显示“家庭电话:”,对用户的输入,如果不满足如下具体要求,就给出提示,要求重新输入:
姓名:至少输入1个字符,至多8个字符;
性别:输入字符必须为"男"或"女";
年龄:输入的年龄数在1到80之间;
家庭电话:输入的家庭电话在7到12位之间;
办公电话:输入的办公电话在7到12位之间;
手机:输入的手机号码必须11位且前两位必须是"13"或"15";
关系:系统输出提示项(编号),由用户选择输入编号0到4;
联系地址:输入的联系地址最多39个字符;
邮政编码:输入的邮政编码必须6位。
⑸分屏显示记录函数void list(void):每屏显示两条记录,等待用户按键,用户按键不显示在屏幕上,用户按键后再显示下一屏;
⑹显示一条记录函数void type(ADDRESS *p):由分屏显示记录函数list、按姓名查询记录函数findname、修改记录函数update、删除记录函数dele、显示按姓名排序函数sortname、快速查询记录函数quicksearch调用。记录信息按数据项分行显示;
⑺添加记录函数void append(void):向系统添加新记录,并能够保持数据文件address.dat和排序文件sortname.dat的一致性,且排序文件sortname.dat仍是有序的,具体输入的数据与输入一条记录函数的要求相同;
⑻修改记录函数void update(void):按用户输入的姓名修改已有数据,用户输入的姓名后查找记录是否存在,若不存在,给出相应提示,若存在,显示此记录,并要求修改,修改时,对每一个数据项都要询问是否修改此项,若不修改,询问下一项,若修改,由用户输入修改内容,需检查用户输入的姓名与被修改记录的姓名和其他记录的姓名是否相同,若相同,给出相应提示,要求重新输入,若都不同,才允许修改其他数据项,具体输入的数据与输入一条记录函数的要求相同,对于文件的处理的要求与添加记录函数的要求相同;
⑼删除记录函数void dele(void):删除指定姓名的记录,对于文件的处理的要求与添加记录函数的要求相同;
⑽建立排序文件函数void createsortfile(ADDRESS temp1[],int n):对数据记录进行排序,保存到排序文件sortname.dat中,注意:不要影响原数据记录。由初始化函数initializtion、添加记录函数append、修改记录函数update、删除记录函数dele、显示按姓名排序函数sortname调用;
⑾显示按姓名排序函数void sortname(void):显示按姓名排序的结果;
⑿按姓名查询记录函数void findname(void):在数据记录中按姓名查询指定记录;
⒀快速查询记录函数void quicksearch(void):对排序文件中的记录,使用二分查找法按姓名查询指定记录;
⒁主菜单函数int menuselect(void):制作含有8个功能项的菜单,如下:
********************菜 单********************
* 0.显示通讯录 *
* 1.添加记录 *
* 2.修改记录 *
* 3.删除记录 *
* 4.按姓名排序 *
* 5.按姓名查询 *
* 6.快速查询 *
* 7.退出 *
*********************************************
提示用户进行选择(编号),如果选择错误要求重新选择,选择正确提示确认,如果用户确认选错了,再重新选择,如果用户确认是选该项,返回主函数,去执行相应的功能,仅由主函数调用;
⒂退出系统函数void quit(void):将记录数据写入磁盘文件,显示结束语:“欢迎再次使用通讯录管理系统,再见!”,等待用户按键(用户按键不显示)退出系统;
⒃主函数void main(void):调用初始化函数,显示提示:“请按菜单选择要进行的操作,按任意键开始。”,等待用户按键(用户按键不显示),按主菜单函数的返回值,调用相应的函数。
1、数据结构描述
1)程序设计中要求至少使用以下的数据结构:
①基本类型数据;
②数组类型;
③指针类型;
④结构体类型;
⑤文件类型。
2)必备的数据结构说明如下:
①符号常量:N,用来说明通讯录能容纳的最大记录数,其具体值规定为200;
②定义结构体类型标识符ADDRESS,用来定义该类型的结构体变量、数组和指针,该结构体包括以下数据成员:
char name[9]; /*姓名*/
char sex[3]; /*性别*/
int age; /*年龄*/
char tele[3][13]; /*电话,包括:家庭、单位、手机*/
char group[5]; /*分组,包括:家人、同事、同学、朋友、其他等*/
char address[40]; /*联系地址*/
char postalcode[7]; /*邮政编码*/
③4个外部变量:
temp[N]:为ADDRESS类型的结构体数组,用来存放从数据文件address.dat中读出的记录,以便各函数使用;
field[9][11]={"姓名","性别","年龄","家庭电话","单位电话","手机","关系","联系地址","邮政编码"}:为二维字符数组,用于记录输入、添加、修改、删除等操作的信息提示;
relation[5][5]={"家人","同事","同学","朋友","其他"}:为二维字符数组,用于记录输入、添加、修改等操作的选择项提示;
piece:为int类型的计数器,用来记录记录数,可供各函数使用。
2、系统总体功能(参见附件)
(手机)通讯录管理系统应具备以下功能:
①系统初始化:显示欢迎语:“欢迎使用通讯录管理系统!”和“按任意键系统开始初始化,显示通讯录!”,完成将从数据文件address.dat中读出的记录送入结构体数组temp(如果该文件中不存在记录,要求用户输入),以便程序运行过程中由其他函数使用;显示通讯录;返回通讯录含记录的条数;
②添加记录:向通讯录添加新记录;
③修改记录:修改通讯录中的记录;
④删除记录:删除通讯录中的记录;
⑤按姓名排序:显示通讯录中按姓名排序的记录;
⑥按姓名查询:显示通讯录中按姓名查询得到的记录;
⑦快速查询:显示通讯录中按姓名通过快速查询得到的记录;
⑧退出系统:将记录数据写入磁盘文件,显示结束语,退出系统。
3、系统中使用的各函数说明
以下是系统中使用的各个函数,各函数的名称、返回值类型、函数参数的类型、个数、顺序、功能均已给定,请按此来编写相应的函数。
⑴初始化函数int initializtion(void):完成如上所述的初始化功能,仅由主函数调用;
⑵输入记录函数int enter(void):完成对初始记录的输入,仅由初始化函数调用;
⑶查找函数int seek(char same[]):由输入一条记录函数input、修改记录函数update调用,目的是避免数据记录中存在同名记录。函数参数为用户输入的姓名,函数返回值为1(找到)或0(没找到);
⑷输入一条记录函数void input(ADDRESS *p):由输入记录函数enter、添加记录函数append调用。输入各数据项时需要在屏幕上显示相应数据项的提示,如:输入家庭电话时,屏幕上显示“家庭电话:”,对用户的输入,如果不满足如下具体要求,就给出提示,要求重新输入:
姓名:至少输入1个字符,至多8个字符;
性别:输入字符必须为"男"或"女";
年龄:输入的年龄数在1到80之间;
家庭电话:输入的家庭电话在7到12位之间;
办公电话:输入的办公电话在7到12位之间;
手机:输入的手机号码必须11位且前两位必须是"13"或"15";
关系:系统输出提示项(编号),由用户选择输入编号0到4;
联系地址:输入的联系地址最多39个字符;
邮政编码:输入的邮政编码必须6位。
⑸分屏显示记录函数void list(void):每屏显示两条记录,等待用户按键,用户按键不显示在屏幕上,用户按键后再显示下一屏;
⑹显示一条记录函数void type(ADDRESS *p):由分屏显示记录函数list、按姓名查询记录函数findname、修改记录函数update、删除记录函数dele、显示按姓名排序函数sortname、快速查询记录函数quicksearch调用。记录信息按数据项分行显示;
⑺添加记录函数void append(void):向系统添加新记录,并能够保持数据文件address.dat和排序文件sortname.dat的一致性,且排序文件sortname.dat仍是有序的,具体输入的数据与输入一条记录函数的要求相同;
⑻修改记录函数void update(void):按用户输入的姓名修改已有数据,用户输入的姓名后查找记录是否存在,若不存在,给出相应提示,若存在,显示此记录,并要求修改,修改时,对每一个数据项都要询问是否修改此项,若不修改,询问下一项,若修改,由用户输入修改内容,需检查用户输入的姓名与被修改记录的姓名和其他记录的姓名是否相同,若相同,给出相应提示,要求重新输入,若都不同,才允许修改其他数据项,具体输入的数据与输入一条记录函数的要求相同,对于文件的处理的要求与添加记录函数的要求相同;
⑼删除记录函数void dele(void):删除指定姓名的记录,对于文件的处理的要求与添加记录函数的要求相同;
⑽建立排序文件函数void createsortfile(ADDRESS temp1[],int n):对数据记录进行排序,保存到排序文件sortname.dat中,注意:不要影响原数据记录。由初始化函数initializtion、添加记录函数append、修改记录函数update、删除记录函数dele、显示按姓名排序函数sortname调用;
⑾显示按姓名排序函数void sortname(void):显示按姓名排序的结果;
⑿按姓名查询记录函数void findname(void):在数据记录中按姓名查询指定记录;
⒀快速查询记录函数void quicksearch(void):对排序文件中的记录,使用二分查找法按姓名查询指定记录;
⒁主菜单函数int menuselect(void):制作含有8个功能项的菜单,如下:
********************菜 单********************
* 0.显示通讯录 *
* 1.添加记录 *
* 2.修改记录 *
* 3.删除记录 *
* 4.按姓名排序 *
* 5.按姓名查询 *
* 6.快速查询 *
* 7.退出 *
*********************************************
提示用户进行选择(编号),如果选择错误要求重新选择,选择正确提示确认,如果用户确认选错了,再重新选择,如果用户确认是选该项,返回主函数,去执行相应的功能,仅由主函数调用;
⒂退出系统函数void quit(void):将记录数据写入磁盘文件,显示结束语:“欢迎再次使用通讯录管理系统,再见!”,等待用户按键(用户按键不显示)退出系统;
⒃主函数void main(void):调用初始化函数,显示提示:“请按菜单选择要进行的操作,按任意键开始。”,等待用户按键(用户按键不显示),按主菜单函数的返回值,调用相应的函数。