SEMI--C语言作业:电话号码存储系统 要求和实现
第一部分:需求概述
超级市场中,有的时候需要保存购买者的名称、电话号码、地址信息,以方便进行送货上门、订购服务。
电话号码目录是拥有大量数据的存储库,提供有关个人和组织的信息,简易的电话号码存储系统可以采用C语言来实现,并且这些信息可以保存在磁盘文件上。
随着新订户的加入、一些老订户的删除以及其他订户数据的改变,必须经常地更新目录。除了添加、删除、修改操作外,还可以查询现有的数据。
第二部分:整体设计
系统采用C语言来编写,电话号码目录要求存在一个名为 telefon.dat 的文件中,该文件应包括下列订户详细信息:
订户名字(最多 30 个字符);
地址(最多 50 个字符);
电话号码(介于 4000000 和 4999999 之间);
需要实现以下函数:
o 单个订户信息的录入
负甲一方 11:22:58
;(一次输入一个订户信息,可由软件使用者确定是否继续输入下一个订户信息)
o 显示订户信息;(分为显示所有订户信息和显示满足某个条件的订户信息)
o 排序;(按照订户名字由小到大)
o 插入;(插入后保持有序)
o 删除;(删除后保持有序)
在主函数中调用以上函数,分别完成录入、排序、插入和删除功能,并显示排序前后的订户信息,以及插入删除后的订户信息
telefon.dat 文件始终应该按订户名排序,而不管执行的是什么文件修改操作。
电话号码目录系统应以下列菜单开始:
TELEPHONE DIRECTORY SYSTEM
1. Add new subscriber details
2. Modify existing subscriber details
3. Delete existing subscriber details
4. Display subscriber details based on telephone number
5. Display subscriber details based on subscriber name
负甲一方 11:22:58
6. View Directory
7. Quit
Enter choice:
根据用户的选择,将执行对应的操作。
第三部分:实现说明
下图显示了运行该程序后的菜单选项。
图 1:主菜单
对应的各项菜单的操作如下:
Add new subscriber details(添加新订户的详细信息)
在主界面上输入1,接受新订户的详细信息,确保名字和地址不为空,并且电话号码在指定的范围之内,将记录存在排序文件中,使该文件按订户名的升序排列。
添加记录的屏幕如图 2 所示,如果用户输入了无效的号码,将显示电话号码的范围。
图 2:添加订户
Modify existing subscriber details(修改现有订户的详细信息)
在主界面上输入2,接受需要修改其详细信息的订户名字,首先定位并显示现有的记录,接受新订户的详细信息,确保名字和地址不为空,并且电话号码在指定的范围之内,将已修改的记
负甲一方 11:22:58
录保存在文件中,确保该文件按订户名的升序排列。
修改记录的屏幕如图 3 和图 4 所示。
图 3:修改订户的详细信息
图 4:修改订户的详细信息 - I
Delete existing subscriber details(删除现有订户的详细信息)
接受需要删除其详细信息的订户名字,定位并显示现有的记录,删除文件中的记录。
删除记录的屏幕如图 5 和图 6 所示。
图 5:删除订户的详细信息
负甲一方 11:23:43
图 6:删除订户的详细信息 - I
Display subscriber details based on telephone number(显示根据电话号码查出的订户详细信息)
接受需要查看其详细信息的订户名字,定位并显示相应记录。
下列两图(图 7 和图 8)定位了电话号码 4000002。
图 7:输入电话号码
图 8:订户的详细信息
Display subscriber details based on subscriber name(显示根据订户名查出的订户详细信息)
接受需要查看其详细信息的订户名字,定位并显示相应记录。
下列两图(图 9 和图 10)显示了 Mark 的记录。
图 9:输入订户名字
图 10:订户的详细信息
View Directory(查看目录)
显示电话号码目录中的所有记录,下图显示了 telefon.dat 文件中的所有记录。
图 11:查看所有记录
Quit(退出)
关闭程序,并退出电话号码目录系统。
此外,还
负甲一方 11:23:44
需要在系统的所有功能点处,显示适当的消息。
第四部分:对应的章节内容
在学习C语言课程的过程中,可以逐步完成以上作业的要求,可以在第四章讲述完毕后进行本作业。
第四章:C 语言中的输入和输出
创建图 1.1 所示的菜单,要显示和接受菜单选项,请使用printf () 和 scanf () 函数。
第五章:条件
用户可以选择菜单选项,根据选择的选项,使用 if 条件或 switch 来执行适当的操作。
第六章:循环
要执行多个操作,可以将该菜单包括在一个循环中,如果用户选择错误,应再次显示该菜单。
第七章:数组
接受多个订户的详细信息声明数组,接受详细信息以后,使用户能够根据订户名或电话号码查询订户详细信息。
第九章:函数
创建适当的函数来添加、修改、删除、查询和查看详细信息。
第十章:字符串
在本工程中必须使用 strlen、strcmp 之类
负甲一方 11:23:44
各种字符串函数,例如,如果用户忘记输入订户名字,则可以使用 strlen 来检查该变量是否为空。
第十一章:复杂数据类型及排序
在开始时要声明一个结构来存储订户详细信息,它的数据成员包括名字、地址和电话号码。
第十二章:文件操作
所有的记录都保存在 telefon.dat 文件中。
接受订户详细信息时,应检查该文件是否存在,如果该文件不存在,则以写模式来打开它。
当用户选择修改菜单时,以读+写模式来打开 telefon.dat 文件,如果该文件不存在,则显示一条错误消息。
如果用户选择删除、显示或查看菜单,则以读模式来打开 telefon.dat 文件,如果该文件不存在,应显示相应的错误消息。
本工程中将使用下列与文件操作相关的函数:
fopen -打开文件;
fwrite - 将数据添加到文件中;
fread - 从文件中读取数据;
fclose - 关闭文件。
说明:BOOK.TXT为存储数据的
1.输入名字和电话号码
2.输入名字读取数据
3.退出
用WIN-TC编写,只能输入英文。
/*源代码*/
#include "stdio.h"
#include "conio.h"
struct student
{
char name1;
char name2;
char name3;
char name4;
char name5;
char name6;
}stu[2];
print()
{
printf(" Phone Book\n");
printf("1.enter message\n");
printf("2.put out message\n");
printf("3.exit\n");
}
en()
{
FILE *fp;
char b[5],v;
clrscr();
if((fp=fopen("d:\\1.txt","a"))==NULL)
{
printf("wrong");
return;
}
printf("please enter name:(6 char)");
scanf("%s",b);
if(strlen(b)==6)
{
fputs(b,fp);
fprintf(fp," \n");
printf("\nplease enter number:");
scanf("%s",v);
fputs(v,fp);
fprintf(fp," \n");
}
else
printf(" ERROR!!!\nthe strlen of name out of control , name=%d\n",strlen(b));
fclose(fp);
printf("\npress any key to return...");
getch();
}
out()
{
FILE *fp;
char a,b;
clrscr();
getchar();
if((fp=fopen("d:\\1.txt","r"))==NULL)
{
printf("wrong");
return;
}
printf("please enter name:(6 char)");
stu[2].name1=getchar();
stu[2].name2=getchar();
stu[2].name3=getchar();
stu[2].name4=getchar();
stu[2].name5=getchar();
stu[2].name6=getchar();
while(!feof(fp))
{
stu[1].name1=fgetc(fp);
stu[1].name2=fgetc(fp);
stu[1].name3=fgetc(fp);
stu[1].name4=fgetc(fp);
stu[1].name5=fgetc(fp);
stu[1].name6=fgetc(fp);
fseek(fp,-6L,SEEK_CUR);
fgets(a,1000,fp);
fgets(b,1000,fp);
if(stu[1].name1==stu[2].name1&&
stu[1].name2==stu[2].name2&&
stu[1].name3==stu[2].name3&&
stu[1].name4==stu[2].name4&&
stu[1].name5==stu[2].name5&&
stu[1].name6==stu[2].name6)
{
printf("name:%snumeber:%s",a,b);
break;
}
}
fclose(fp);
printf("\npress any key to return...");
getch();
}
wr()
{
clrscr();
printf("the choice is wrong,please enter again!\n");
printf("\npress any key to return...");
}
main()
{
int a;
while(a!=3)
{
print();
printf("please enter 1,2,3:");
scanf("%d",&a);
switch(a)
{
case 1:en();clrscr();break;
case 2:out();clrscr();break;
case 3:break;
default:wr();getch();clrscr();break;
}
}
}
电话号码存储系统,c语言
需积分: 9 61 浏览量
2009-03-18
17:04:44
上传
评论
收藏 13KB RAR 举报
Dfer.Site
- 粉丝: 40
- 资源: 11
最新资源
- 南京邮电大学数学实验:熟练掌握 Matlab 软件的基本命令和操作
- 2017校招真题校园招聘真题算法题(37道)Python源码.zip
- 基于单片机protues仿真的多功能自动饮水机系统设计(仿真图、源代码、演示视频)
- 二叉树7-1-1.cpp
- android 9.0 原生模拟器 签名文件
- 技术面试最后反问面试官的话 校招面试非技术问题有哪些 非技术问题如何回答.png
- NB-IOT-BC26全网通模块Altium+ CADENCE +PADS三种格式(原理图SCH+PCB封装库)文件.zip
- 基于微信小程序开发的校园失物招领系统源码毕业设计(优质项目源码).zip
- 词向量是一种将自然语言中的单词转换为数值向量的技术,它能够捕捉词义和上下文信息
- nmap与masscan的简单使用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈