通讯录信息的录入,按姓名排序并存入文件中。什么意思
时间: 2024-03-30 13:38:33 浏览: 17
这个问题涉及到通讯录信息的管理和文件操作。通讯录信息包括姓名、电话号码和其他联系方式等,需要将这些信息录入到计算机中。按姓名排序是指将通讯录中的信息按照姓名的字母顺序进行排序,比如从A到Z或从Z到A。最后,将排序后的通讯录信息存入文件中,以便以后使用。
具体实现可以通过编写一个程序来实现。程序首先需要读取用户输入的通讯录信息,然后将其按照姓名进行排序。接着,将排序后的信息存入文件中,可以选择使用CSV、TXT或其他格式的文件进行存储。最后,程序可以根据用户需要,读取文件中的信息进行查询、修改或删除等操作。
相关问题
写一段代码用c语言来实现,个人通讯录管理系统 通讯录信息包括:姓名、电话号码、QQ、微信号、家庭住址。实现以下菜单显示的功能: 1、通讯录信息的录入,按姓名排序并存入文件中。2、添加,可以添加联系人信息。若已有,提示是否修改该人的信息,若不修改,则插入该联系人信息,插入后仍然保持按姓名有序,再保存到原文件中。3查询,查询联系人信息。按姓名查询
以下是个人通讯录管理系统的代码实现,包括菜单显示和各个功能的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_PHONE_LEN 12
#define MAX_QQ_LEN 20
#define MAX_WECHAT_LEN 20
#define MAX_ADDRESS_LEN 50
typedef struct Contact {
char name[MAX_NAME_LEN]; // 姓名
char phone[MAX_PHONE_LEN]; // 电话号码
char qq[MAX_QQ_LEN]; // QQ号码
char wechat[MAX_WECHAT_LEN]; // 微信号
char address[MAX_ADDRESS_LEN]; // 家庭住址
} Contact;
// 显示菜单
void show_menu() {
printf("=================================\n");
printf("= 1. 通讯录信息的录入 =\n");
printf("= 2. 添加联系人信息 =\n");
printf("= 3. 查询联系人信息 =\n");
printf("= 4. 退出程序 =\n");
printf("=================================\n");
}
// 录入信息
void input_info(Contact *contacts, int n) {
for (int i = 0; i < n; i++) {
printf("请输入第%d个联系人的信息:\n", i + 1);
printf("姓名:");
scanf("%s", contacts[i].name);
printf("电话号码:");
scanf("%s", contacts[i].phone);
printf("QQ号码:");
scanf("%s", contacts[i].qq);
printf("微信号:");
scanf("%s", contacts[i].wechat);
printf("家庭住址:");
scanf("%s", contacts[i].address);
}
// 按姓名排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (strcmp(contacts[j].name, contacts[j + 1].name) > 0) {
Contact tmp = contacts[j];
contacts[j] = contacts[j + 1];
contacts[j + 1] = tmp;
}
}
}
// 存入文件
FILE *fp = fopen("contacts.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
for (int i = 0; i < n; i++) {
fprintf(fp, "%s %s %s %s %s\n", contacts[i].name, contacts[i].phone, contacts[i].qq, contacts[i].wechat, contacts[i].address);
}
fclose(fp);
printf("录入成功\n");
}
// 添加联系人信息
void add_info(Contact *contacts, int *n) {
Contact new_contact;
printf("请输入新联系人的信息:\n");
printf("姓名:");
scanf("%s", new_contact.name);
printf("电话号码:");
scanf("%s", new_contact.phone);
printf("QQ号码:");
scanf("%s", new_contact.qq);
printf("微信号:");
scanf("%s", new_contact.wechat);
printf("家庭住址:");
scanf("%s", new_contact.address);
// 查找是否已有该联系人
int i;
for (i = 0; i < *n; i++) {
if (strcmp(contacts[i].name, new_contact.name) == 0) {
break;
}
}
if (i < *n) {
// 已有该联系人,询问是否修改
printf("该联系人已存在,是否要修改他的信息?(y/n)");
char c;
scanf(" %c", &c);
if (c == 'y' || c == 'Y') {
contacts[i] = new_contact;
} else {
// 不修改,插入新联系人
for (int j = *n - 1; j >= i; j--) {
contacts[j + 1] = contacts[j];
}
contacts[i] = new_contact;
(*n)++;
}
} else {
// 没有该联系人,插入新联系人
for (int j = *n - 1; j >= i; j--) {
contacts[j + 1] = contacts[j];
}
contacts[i] = new_contact;
(*n)++;
}
// 按姓名排序
for (i = 0; i < *n - 1; i++) {
for (int j = 0; j < *n - 1 - i; j++) {
if (strcmp(contacts[j].name, contacts[j + 1].name) > 0) {
Contact tmp = contacts[j];
contacts[j] = contacts[j + 1];
contacts[j + 1] = tmp;
}
}
}
// 存入文件
FILE *fp = fopen("contacts.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
for (int i = 0; i < *n; i++) {
fprintf(fp, "%s %s %s %s %s\n", contacts[i].name, contacts[i].phone, contacts[i].qq, contacts[i].wechat, contacts[i].address);
}
fclose(fp);
printf("添加成功\n");
}
// 查询联系人信息
void search_info(Contact *contacts, int n) {
char name[MAX_NAME_LEN];
printf("请输入要查询的联系人姓名:");
scanf("%s", name);
// 二分查找
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
int cmp = strcmp(contacts[mid].name, name);
if (cmp == 0) {
printf("姓名:%s\n", contacts[mid].name);
printf("电话号码:%s\n", contacts[mid].phone);
printf("QQ号码:%s\n", contacts[mid].qq);
printf("微信号:%s\n", contacts[mid].wechat);
printf("家庭住址:%s\n", contacts[mid].address);
return;
} else if (cmp < 0) {
left = mid + 1;
} else {
right = mid - 1;
}
}
printf("未找到联系人\n");
}
int main() {
int n = 0;
Contact contacts[100];
// 从文件中读取联系人信息
FILE *fp = fopen("contacts.txt", "r");
if (fp != NULL) {
while (fscanf(fp, "%s %s %s %s %s", contacts[n].name, contacts[n].phone, contacts[n].qq, contacts[n].wechat, contacts[n].address) == 5) {
n++;
}
fclose(fp);
}
// 显示菜单,处理用户输入
while (1) {
show_menu();
int choice;
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
input_info(contacts, n);
break;
case 2:
add_info(contacts, &n);
break;
case 3:
search_info(contacts, n);
break;
case 4:
return 0;
default:
printf("无效的选择,请重新输入\n");
break;
}
}
return 0;
}
```
以上代码实现了个人通讯录管理系统的基本功能,包括录入信息、添加联系人信息和查询联系人信息。联系人信息按姓名排序并存入文件中,程序启动时从文件中读取联系人信息并显示菜单供用户选择。
做一段通讯录按姓名排序的c语言代码
### 回答1:
我不是专业的程序员,但是我可以给你参考一下:
#include<stdio.h>
#include<string.h>//定义一个结构体
typedef struct {
char name[20];
char phone[11];
} record;//定义一个比较函数
int compare(const void *p1, const void *p2)
{
record *r1 = (record*)p1;
record *r2 = (record*)p2;
return strcmp(r1->name,r2->name);
}//主函数
void main()
{
int n;
record rec[1000];
//输入通讯录中联系人的个数
printf("输入通讯录中联系人的个数:");
scanf("%d", &n);
//循环读入联系人信息
for(int i=0; i<n; i++)
{
printf("输入第%d个联系人的姓名:",i+1);
scanf("%s", rec[i].name);
printf("输入第%d个联系人的电话号码:",i+1);
scanf("%s", rec[i].phone);
}
//按名字排序
qsort(rec, n, sizeof(record), compare);
//输出排序后的结果
printf("按照姓名排序的结果:\n");
for(int i=0;i<n;i++)
{
printf("%s\t%s\n",rec[i].name,rec[i].phone);
}
}
### 回答2:
#include <stdio.h>
#include <string.h>
// 定义通讯录结构体
struct contact {
char name[20];
char phone[20];
};
void sortContacts(struct contact contacts[], int numContacts) {
// 使用冒泡排序按照姓名排序
for (int i = 0; i < numContacts - 1; i++) {
for (int j = 0; j < numContacts - i - 1; j++) {
// 比较姓名并交换位置
if (strcmp(contacts[j].name, contacts[j + 1].name) > 0) {
struct contact temp = contacts[j];
contacts[j] = contacts[j + 1];
contacts[j + 1] = temp;
}
}
}
}
int main() {
int numContacts;
printf("请输入通讯录中的联系人数量:");
scanf("%d", &numContacts);
struct contact contacts[numContacts];
// 输入联系人信息
for (int i = 0; i < numContacts; i++) {
printf("请输入第%d个联系人的姓名:", i + 1);
scanf("%s", contacts[i].name);
printf("请输入第%d个联系人的电话号码:", i + 1);
scanf("%s", contacts[i].phone);
}
sortContacts(contacts, numContacts);
// 输出排序后的通讯录
printf("按姓名排序后的通讯录:\n");
for (int i = 0; i < numContacts; i++) {
printf("姓名:%s,电话:%s\n", contacts[i].name, contacts[i].phone);
}
return 0;
}
### 回答3:
下面是一个用C语言实现按姓名排序的通讯录的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_CONTACTS 100
// 通讯录结构体
typedef struct {
char name[50];
char number[20];
} Contact;
// 比较函数,用于排序
int compare(const void *a, const void *b) {
Contact *contactA = (Contact *)a;
Contact *contactB = (Contact *)b;
return strcmp(contactA->name, contactB->name);
}
int main() {
Contact contacts[MAX_CONTACTS];
int numOfContacts;
// 输入通讯录
printf("请输入联系人数量:");
scanf("%d", &numOfContacts);
getchar(); // 消耗换行符
for (int i = 0; i < numOfContacts; i++) {
printf("请输入第 %d 位联系人的姓名:", i+1);
fgets(contacts[i].name, sizeof(contacts[i].name), stdin);
contacts[i].name[strcspn(contacts[i].name, "\n")] = 0; // 删除换行符
printf("请输入第 %d 位联系人的电话号码:", i+1);
fgets(contacts[i].number, sizeof(contacts[i].number), stdin);
contacts[i].number[strcspn(contacts[i].number, "\n")] = 0; // 删除换行符
}
// 按姓名排序
qsort(contacts, numOfContacts, sizeof(Contact), compare);
// 打印排序后的通讯录
printf("\n按姓名排序后的通讯录:\n");
for (int i = 0; i < numOfContacts; i++) {
printf("姓名:%s,电话号码:%s\n", contacts[i].name, contacts[i].number);
}
return 0;
}
```
这个程序首先要求用户输入联系人的数量,然后逐个输入每个联系人的姓名和电话号码。之后,使用`qsort`函数按姓名对联系人进行排序,最后将排序后的通讯录打印出来。程序通过`compare`函数来比较联系人姓名的大小,以便排序。