请写一段可以在vs2010中运行的C语言通讯录代码要求包括学生的姓名姓名性别籍贯电话 ⑴ 添加和删除通讯录中的记录信息; ⑵ 浏览通讯录信息; ⑶ 根据姓名进行查询。 ⑷ 统计排序,统计某籍贯的所有学生数量并排序。 ⑸ 结果格式化显示,并且输出.xlex文件。(6)可以修改学生信息
时间: 2024-03-06 13:51:39 浏览: 139
C语言通讯录程序设计大作业.DOCX
5星 · 资源好评率100%
很高兴回答你的问题!以下是可以在vs2010中运行的C语言通讯录代码,满足你的所有要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100 // 最大通讯录记录数
typedef struct {
char name[20]; // 姓名
char sex[5]; // 性别
char hometown[20]; // 籍贯
char phone[20]; // 电话
} Student;
Student book[MAX_SIZE]; // 通讯录记录数组
int count = 0; // 当前通讯录记录数
void add(); // 添加通讯录记录
void del(); // 删除通讯录记录
void browse(); // 浏览通讯录记录
void search(); // 根据姓名查询通讯录记录
void sort(); // 统计并排序籍贯相同的学生数量
void modify(); // 修改学生信息
void write_xlex(); // 输出.xlex文件
int main() {
int choice;
while (1) {
printf("请选择要进行的操作:\n");
printf("1. 添加通讯录记录\n");
printf("2. 删除通讯录记录\n");
printf("3. 浏览通讯录记录\n");
printf("4. 根据姓名查询通讯录记录\n");
printf("5. 统计并排序籍贯相同的学生数量\n");
printf("6. 修改学生信息\n");
printf("7. 输出.xlex文件\n");
printf("8. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
add();
break;
case 2:
del();
break;
case 3:
browse();
break;
case 4:
search();
break;
case 5:
sort();
break;
case 6:
modify();
break;
case 7:
write_xlex();
break;
case 8:
return 0;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
}
void add() {
if (count >= MAX_SIZE) {
printf("通讯录已满,无法添加记录!\n");
return;
}
Student student;
printf("请输入姓名:");
scanf("%s", student.name);
printf("请输入性别:");
scanf("%s", student.sex);
printf("请输入籍贯:");
scanf("%s", student.hometown);
printf("请输入电话:");
scanf("%s", student.phone);
book[count++] = student;
printf("添加成功!\n");
}
void del() {
if (count == 0) {
printf("通讯录为空,无法删除记录!\n");
return;
}
char name[20];
printf("请输入要删除的记录的姓名:");
scanf("%s", name);
int i;
for (i = 0; i < count; i++) {
if (strcmp(book[i].name, name) == 0) {
int j;
for (j = i; j < count - 1; j++) {
book[j] = book[j + 1];
}
count--;
printf("删除成功!\n");
return;
}
}
printf("未找到该记录!\n");
}
void browse() {
if (count == 0) {
printf("通讯录为空,无法浏览记录!\n");
return;
}
printf("姓名\t性别\t籍贯\t电话\n");
int i;
for (i = 0; i < count; i++) {
printf("%s\t%s\t%s\t%s\n", book[i].name, book[i].sex, book[i].hometown, book[i].phone);
}
}
void search() {
if (count == 0) {
printf("通讯录为空,无法查询记录!\n");
return;
}
char name[20];
printf("请输入要查询的记录的姓名:");
scanf("%s", name);
int i;
for (i = 0; i < count; i++) {
if (strcmp(book[i].name, name) == 0) {
printf("姓名\t性别\t籍贯\t电话\n");
printf("%s\t%s\t%s\t%s\n", book[i].name, book[i].sex, book[i].hometown, book[i].phone);
return;
}
}
printf("未找到该记录!\n");
}
void sort() {
if (count == 0) {
printf("通讯录为空,无法统计排序!\n");
return;
}
char hometown[20];
printf("请输入要统计排序的籍贯:");
scanf("%s", hometown);
int i, j;
int num = 0;
for (i = 0; i < count; i++) {
if (strcmp(book[i].hometown, hometown) == 0) {
num++;
}
}
if (num == 0) {
printf("未找到该籍贯的学生!\n");
return;
}
Student *students = (Student *)malloc(num * sizeof(Student));
if (students == NULL) {
printf("内存分配失败!\n");
return;
}
int k = 0;
for (i = 0; i < count; i++) {
if (strcmp(book[i].hometown, hometown) == 0) {
students[k++] = book[i];
}
}
// 冒泡排序
for (i = 0; i < num - 1; i++) {
for (j = 0; j < num - 1 - i; j++) {
if (strcmp(students[j].name, students[j + 1].name) > 0) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("姓名\t性别\t籍贯\t电话\n");
for (i = 0; i < num; i++) {
printf("%s\t%s\t%s\t%s\n", students[i].name, students[i].sex, students[i].hometown, students[i].phone);
}
free(students);
}
void modify() {
if (count == 0) {
printf("通讯录为空,无法修改记录!\n");
return;
}
char name[20];
printf("请输入要修改的记录的姓名:");
scanf("%s", name);
int i;
for (i = 0; i < count; i++) {
if (strcmp(book[i].name, name) == 0) {
printf("请输入修改后的信息:\n");
printf("姓名:");
scanf("%s", book[i].name);
printf("性别:");
scanf("%s", book[i].sex);
printf("籍贯:");
scanf("%s", book[i].hometown);
printf("电话:");
scanf("%s", book[i].phone);
printf("修改成功!\n");
return;
}
}
printf("未找到该记录!\n");
}
void write_xlex() {
if (count == 0) {
printf("通讯录为空,无法输出.xlex文件!\n");
return;
}
char filename[30];
printf("请输入要输出的.xlex文件名:");
scanf("%s", filename);
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
printf("无法创建文件!\n");
return;
}
fprintf(fp, "姓名\t性别\t籍贯\t电话\n");
int i;
for (i = 0; i < count; i++) {
fprintf(fp, "%s\t%s\t%s\t%s\n", book[i].name, book[i].sex, book[i].hometown, book[i].phone);
}
fclose(fp);
printf("输出成功!\n");
}
```
该程序实现了添加和删除通讯录记录、浏览通讯录信息、根据姓名进行查询、统计排序、修改学生信息、结果格式化显示,并且输出.xlex文件的功能。你可以根据自己的需求进行修改。注意,为了简化程序,本程序没有进行输入的格式检查,所以在输入时要确保符合要求。
阅读全文