C语言城市信息管理系统:新增菜单功能及初始城市输入
C语言城市信息管理系统:新增菜单功能及初始城市输入
这篇博客文章将介绍如何使用C语言创建一个城市信息管理系统,并提供优化后的代码,实现以下功能:
- 菜单选择: 用户可以通过菜单选择不同的操作。* 初始城市输入: 用户可以自己输入提供初始城市信息。
以下是优化后的代码:c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>
typedef struct City { char name[50]; double x; double y; struct City *next;} City;
City* createLinkedList() { City head = (City)malloc(sizeof(City)); head->next = NULL; return head;}
void insertCity(City *head, char *name, double x, double y) { City newCity = (City)malloc(sizeof(City)); strcpy(newCity->name, name); newCity->x = x; newCity->y = y; newCity->next = head->next; head->next = newCity; printf('城市 '%s' 插入成功 ', name);}
void findCityByName(City *head, char *name) { City *current = head->next; while (current != NULL) { if (strcmp(current->name, name) == 0) { printf('城市名:%s,位置坐标:(%.2lf, %.2lf) ', current->name, current->x, current->y); return; } current = current->next; } printf('找不到城市:%s ', name);}
void findCitiesByDistance(City *head, double x, double y, double distance) { City *current = head->next; int count = 0; printf('距离位置坐标 (%.2lf, %.2lf) %lf 公里以内的城市: ', x, y, distance); while (current != NULL) { double dx = current->x - x; double dy = current->y - y; double currentDistance = sqrt(dx * dx + dy * dy); if (currentDistance <= distance) { printf('城市名:%s,位置坐标:(%.2lf, %.2lf) ', current->name, current->x, current->y); count++; } current = current->next; } if (count == 0) { printf('该范围内没有城市。 '); }}
void deleteCity(City *head, char *name) { City *previous = head; City *current = head->next; while (current != NULL) { if (strcmp(current->name, name) == 0) { previous->next = current->next; free(current); printf('城市 '%s' 删除成功 ', name); return; } previous = current; current = current->next; } printf('找不到城市:%s ', name);}
void updateCity(City *head, char *name, double x, double y) { City *current = head->next; while (current != NULL) { if (strcmp(current->name, name) == 0) { current->x = x; current->y = y; printf('城市 '%s' 更新成功,位置坐标:(%.2lf, %.2lf) ', current->name, current->x, current->y); return; } current = current->next; } printf('找不到城市:%s ', name);}
void saveCitiesToFile(City *head, char *filename) { FILE *file = fopen(filename, 'w'); if (file == NULL) { printf('无法打开文件:%s ', filename); return; }
City *current = head->next; while (current != NULL) { fprintf(file, '%s %.2lf %.2lf
', current->name, current->x, current->y); current = current->next; }
fclose(file); printf('城市信息已保存到文件:%s
', filename);}
City* loadCitiesFromFile(char *filename) { FILE *file = fopen(filename, 'r'); if (file == NULL) { printf('无法打开文件:%s ', filename); return NULL; }
City *head = createLinkedList(); char name[50]; double x, y; while (fscanf(file, '%s %lf %lf', name, &x, &y) != EOF) { insertCity(head, name, x, y); }
fclose(file); printf('从文件:%s 加载城市信息成功
', filename); return head;}
void freeLinkedList(City *head) { City *current = head; while (current != NULL) { City *temp = current; current = current->next; free(temp); }}
void printMenu() { printf(' 城市信息管理系统菜单: '); printf('1. 插入城市信息 '); printf('2. 根据城市名查找位置坐标 '); printf('3. 根据位置坐标和距离返回城市列表 '); printf('4. 删除城市 '); printf('5. 更新城市信息 '); printf('6. 保存城市信息到文件 '); printf('7. 从文件加载城市信息 '); printf('8. 退出程序 '); printf('请选择操作:');}
int main() { City *head = createLinkedList(); int choice;
// 初始城市信息输入 printf('请输入初始城市数量:'); int initialCityCount; scanf('%d', &initialCityCount); for (int i = 0; i < initialCityCount; i++) { char name[50]; double x, y; printf('请输入第 %d 个城市的名称:', i + 1); scanf('%s', name); printf('请输入第 %d 个城市的坐标 x:', i + 1); scanf('%lf', &x); printf('请输入第 %d 个城市的坐标 y:', i + 1); scanf('%lf', &y); insertCity(head, name, x, y); }
do { printMenu(); scanf('%d', &choice);
switch (choice) { case 1: { char name[50]; double x, y; printf('请输入城市名:'); scanf('%s', name); printf('请输入位置坐标(x y):'); scanf('%lf %lf', &x, &y); insertCity(head, name, x, y); break; } case 2: { char name[50]; printf('请输入要查找的城市名:'); scanf('%s', name); findCityByName(head, name); break; } case 3: { double x, y, distance; printf('请输入位置坐标(x y):'); scanf('%lf %lf', &x, &y); printf('请输入距离:'); scanf('%lf', &distance); findCitiesByDistance(head, x, y, distance); break; } case 4: { char name[50]; printf('请输入要删除的城市名:'); scanf('%s', name); deleteCity(head, name); break; } case 5: { char name[50]; double x, y; printf('请输入要更新的城市名:'); scanf('%s', name); printf('请输入新的位置坐标(x y):'); scanf('%lf %lf', &x, &y); updateCity(head, name, x, y); break; } case 6: { char filename[100]; printf('请输入文件名:'); scanf('%s', filename); saveCitiesToFile(head, filename); break; } case 7: { char filename[100]; printf('请输入文件名:'); scanf('%s', filename); City* loadedHead = loadCitiesFromFile(filename); if (loadedHead != NULL) { freeLinkedList(head); head = loadedHead; } break; } case 8: { printf('程序已退出
'); break; } default: { printf('无效的选择,请重新输入 '); break; } }
printf('
'); } while (choice != 8);
freeLinkedList(head);
return 0
原文地址: https://www.cveoy.top/t/topic/p3A 著作权归作者所有。请勿转载和采集!