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
C语言城市信息管理系统:新增菜单功能及初始城市输入

原文地址: https://www.cveoy.top/t/topic/p3A 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录