首页 > 其他分享 >俊。。。你的作业

俊。。。你的作业

时间:2024-01-23 15:09:17浏览次数:16  
标签:head 作业 next linklist while pa printf

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define Max 16


//郑州火车站,二七广场,人民路,紫荆山,燕庄
//实现地铁站的插入、删除、修改、查询、排序以及票价查询工作
//输入上车站与下车站,系统自动计算出票价(两站之内两元,三四站三元)
//输出票价时同时输出用户经过的地铁站
//记录每个地铁站的人流量总数(我觉得这个emm
//并按照使用至少三种排序算法按照人流量从大到小顺序列出站点名称


typedef struct node
{
	int id;//序号
	char name[Max];//车站名称
	int crowd;//人流
	struct node* next;
}linklist;


//菜单
void base()
{
	printf("**********************************************\n");
	printf("******             菜  单             ********\n");
	printf("******    1.插入站点    2.删除站点    ********\n");
	printf("******    3.修改站点    4.票价查询    ********\n");
	printf("******    5.流量排序    6.车票购买    ********\n");
	printf("******           0.退出系统           ********\n");
	printf("**********************************************\n");
}


//创建一个单链表
//尾插法创建,并且含有头结点
linklist* Clist()
{
	char ch;
	linklist* head;
	linklist* s;
	linklist* r;
	head = (linklist*)malloc(sizeof(linklist));//生成头结点
	r = head;//尾指针初值指向头结点
	ch = getchar();//读入第一个结点的值
	int n = 0;
	while (ch != '\n') //$为结束标识符
	{
		s = (linklist*)malloc(sizeof(linklist)); //生成一个新结点
		int i = 0;
		while (ch != ' ') 
		{
			s->name[i] = ch;
			ch = getchar();
			i++;
		}
		s->name[i] = '\0'; // 在字符串末尾添加结束符
		ch = getchar(); // 读取空格后的字符
		s->id = n; n++;
		s->crowd = 0;
		r->next = s; // 新结点插入表尾
		r = s; //尾指针指向新表尾
	}
	r->next = NULL;
	return head;//返回头指针的值
}


//向后插入
void INSETAFTER(linklist* head)
{
	linklist* r, * s;
	linklist* t;
	r = (linklist*)malloc(sizeof(linklist));
	t = (linklist*)malloc(sizeof(linklist));
	int Id;
	printf("请输入插入的地铁站序号、名称:");
	scanf("%d", &Id);
	
	//t是插入的结点前的结点
	r = head->next;
	while (r->id !=Id-1&&r!=NULL)
	{
		r = r->next;
	}
	t = head;
	while (t->next != r)
	{
		t = t->next;
	}

	//将插入点之后的所有结点的id加一
	while (r != NULL)
	{
		r->id++;
		r = r->next;
	}

	//尾插法添加新的站点
	s = (linklist*)malloc(sizeof(linklist)); //生成一个新结点
	int i = 0;
	s->id = Id - 1;
	//printf("请输入新建地铁站的名称:");
	char ch;
	ch = getchar();
	while (ch != '\n')
	{
		s->name[i] = ch;
		ch = getchar();
		i++;
	}
	s->name[i] = '\0'; // 在字符串末尾添加结束符
	//ch = getchar(); // 读取空格后的字符
	s->crowd = 0;
	s->next = t->next;
	t->next = s;
}


//删除
void DELETE(linklist* head)
{
	linklist* p;
	linklist* q;
	linklist* t;
	int n;
	printf("请输入要删除的车站序号:");
	scanf("%d", &n);
	q = head; //p = head;
	while (q->next->id != n-1)
	{
		q = q->next;
	}//要删除的结点之前
	p = q->next;
	q->next = p->next;
	t = p; 
	while (t != NULL)
	{
		t->id--;
		t = t->next;
	}
	free(p);
}


//修改
void CHANGE(linklist* head)
{
	linklist* p; p = head;
	int n; char ch; int i = 0;
	printf("请输入要修改的车站序号、名称:");
	scanf("%d", &n);
	while (p->id != n - 1)
	{
		p = p->next;
	}
	ch = getchar();
	while (ch != '\n')
	{
		p->name[i] = ch;
		ch = getchar();
		i++;
	}
	p->name[i] = '\0';

}


//价格查询
void PRICE(linklist* head)
{
	int a, b;
	printf("请输入进站口、出站口序号:");
	scanf("%d%d", &a, &b);
	printf("票价为:%d元。\n", b-a+1);

	linklist* pa; linklist* pb;
	pa = head; pb = head;
	while (pa->id != a-1)
	{
		pa = pa->next;
	}
	while (pb->id != b-1)
	{
		pb = pb->next;
	}

	printf("乘车路线为:");
	while (pa != pb->next)
	{
		int i = 0;
		printf("%d站:", pa->id + 1);
		while (pa->name[i] != 0)
		{
			printf("%c", pa->name[i]);
			i++;
		}
		pa = pa->next;
		if (pa != pb->next)printf(" --> ");
	}
	printf("\n");
}


//流量输出
void PFCROWD(linklist* head)
{
	linklist* p;
	p = head->next;
	while (p != NULL)
	{
		printf("%2d站流量:%2d\n",p->id+1,p->crowd);
		p = p->next;
	}
}

//购买车票
void BUY(linklist* head)
{
	int a, b;
	printf("请输入进站口、出站口序号:");
	scanf("%d%d", &a, &b);
	printf("票价为:%d元。\n", b - a + 1);

	linklist* pa; linklist* pb;
	pa = head; pb = head;
	while (pa->id != a - 1)
	{
		pa = pa->next;
	}
	while (pb->id != b - 1)
	{
		pb = pb->next;
	}

	printf("乘车路线为:");
	while (pa != pb->next)
	{
		int i = 0;
		printf("%d站:", pa->id + 1);
		while (pa->name[i] != 0)
		{
			printf("%c", pa->name[i]);
			i++;
		}
		pa->crowd++;
		pa = pa->next;
		if (pa != pb->next)printf(" --> ");
	}
	printf("\n");
}


//输出链表
void PRINTLIST(linklist* head)
{
	linklist* p;
	p = head->next;

	while (p != NULL)
	{
		int i = 0;
		printf("%d站:", p->id + 1);
		while (p->name[i] != 0)
		{
			printf("%c", p->name[i]);
			i++;
		}

		p = p->next;
		if (p != NULL)printf(" --> ");
	}
	printf("\n");
}


int main()
{
	base();
	linklist* Subway;

	//先添加五个地铁站
	printf("请输入地铁站的名字,站与站之间用空格隔开。\n");
	printf("输入空格+回车后退出输入。\n");
	Subway = (linklist*)malloc(sizeof(linklist));
	Subway = Clist();
	PRINTLIST(Subway);

	
	int ncase = 1;
	int n = 0;
	while (ncase)
	{
		system("cls");
		base();
		printf("当前地铁线路图如下:\n");
		PRINTLIST(Subway);
		printf("请选择您要进行的操作:");
		scanf("%d", &ncase);
		switch (ncase)
		{
		case 0:
			break;
		case 1://插入地铁站站点
			INSETAFTER(Subway);
			PRINTLIST(Subway);
			system("pause");
			break;
		case 2://删除
			DELETE(Subway);
			PRINTLIST(Subway);
			system("pause");
			break;
		case 3://修改
			CHANGE(Subway);
			PRINTLIST(Subway);
			system("pause");
			break;
		case 4://票价查询
			PRICE(Subway);
			system("pause");
			break;
		case 5://流量排序
			PFCROWD(Subway);
			system("pause");
			break;
		case 6://购买车票
			BUY(Subway);
			system("pause");
			break;
		default:
			printf("无效数字,请重新输入。");
		}
	}
}

标签:head,作业,next,linklist,while,pa,printf
From: https://blog.51cto.com/u_15736615/9379893

相关文章

  • 基于SSM在线作业管理系统的设计与实现
    网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此学生作业信息的管理计算机化,系统化是必要的。设计开发在线作业管理系统不仅会......
  • 安卓移动开发课程设计/Android期末大作业-小说app+源代码+文档说明
    项目介绍安卓课程设计—看书神器实现简单阅读器功能,纯新手安卓课设指南实现功能1.主页底部导航栏2.滚动图片3.从文件管理器读取txt文件4.登录注册退出登录登录相关数据保存在SharedPrefrences5页面大部分都是写死的,不过都有点击事件6.两个webview跳转到别的网站界面预览项目备注1......
  • 安卓移动开发课程设计/Android期末大作业,账本APP+源代码+文档说明
    项目介绍小凯账本APP,安卓端,个人的课程设计需求分析小凯账本APP是为了解决用户快捷方便记账的一款APP,所有的核心功能都是围绕记账展开,目的是为了简化方便记账流程,所以该APP的基本功能需求如表所示。功能说明添加账单分类账单分为收入和支出两类,具体在向下细分为用户自定义账单的分......
  • android移动开发大作业/课程设计-一个支持备注功能的课程表+源代码+文档说明
    项目介绍界面预览项目备注1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作......
  • Android 期末大作业 - 简单计算器,一键运行
    项目介绍项目功能界面预览项目备注1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程......
  • 哈工大android大作业-博客系统+源代码+文档说明+结构图
    项目介绍android大作业,本项目包含三个基本功能,分别是博客爬虫,缓存服务,本地随笔。博客爬虫是分页爬取博客园博客,在app上显示博客的html格式(包括博客中的图片);缓存服务是按策略缓存一些博客到本地数据库,当用户没网时打开app也能有博客可浏览,而不是简单的请求连接网络提示,不会影响用......
  • TuGraph Analytics作业监控面板:运行时组件上的高效分析工具
    作者:丁一背景TuGraphAnalytics作业部署到K8S集群之后,通常会启动多个pod(一个master、一/多个driver、多个container)。用户很难判断作业当前运行的进度如何,也不能通过pod的状态来判断内部进程的状态。无论是查看进度、查看日志、性能分析,都需要到每一个pod中进行对应的操作,运维成本......
  • Android期末作业课程设计-爱篮球论坛+源代码+文档说明
    项目介绍界面预览项目备注1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作......
  • Android期末大作业-Note便签本应用+源代码+文档说明
    项目介绍界面预览项目备注1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作......
  • Android大作业,云备忘录项目+源代码+文档说明
    界面预览项目备注1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目......