每日学习
一、顺序表功能练习
宠物狗管理系统:
dog.h(头文件):
#ifndef _DOG_H
#define _DOG_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 30
//定义狗结构体
typedef struct{
char name[MAX]; //狗的姓名
double prince; //价格
int age; //狗龄
char breed[MAX]; //品种
}dog,*dogPtr;
//定义狗顺序表
typedef struct{
dog d[MAX]; //存储狗信息的数组
int len; //存储狗的数量
}dogList,*dogListPtr;
//创建顺序表
dogListPtr list_create();
//判满操作
int list_full(dogListPtr D);
//判空操作
int list_empty(dogListPtr D);
//添加狗子函数
int list_add(dogListPtr D,dog g);
//遍历所有狗狗函数
void list_show(dogListPtr D);
//按狗名查狗函数,返回狗在表中的位置
int list_searvh_value(dogListPtr D,char name[MAX]);
//删除指定位置的狗函数
int list_delete_pos(dogListPtr D,int pos);
//释放表
void list_free(dogListPtr D);
//按特定种类查狗函数,返回这个种类的所有狗狗信息
int list_searvh_breed(dogListPtr D,char breed[MAX]);
//按指定价格区间查狗函数,返回这个价格区间之内的所有狗狗信息
int list_searvh_price(dogListPtr D,double fprince,double bprince);
#endif
dog.c(源文件):
#include "dog.h"
//创建顺序表
dogListPtr list_create(){
//在堆区申请一个顺序表的空间大小
dogListPtr D=(dogListPtr)malloc(sizeof(dogList));
//判断是否申请成功
if(NULL==D){
printf("狗子空间申请失败!\n");
return NULL;
}
//创建成功后
memset(D->d,0,sizeof(D->d)); //清空数组
D->len=0; //数组长度清零
printf("恭喜你成功创建了新的狗狗国度!\n");
return D;
}
//判满操作
int list_full(dogListPtr D){
if(NULL==D){
printf("违法国度!\n");
return 0;
}
//合法但是已经满了
return D->len == MAX;
}
//判空操作
int list_empty(dogListPtr D){
//判断逻辑
if(NULL==D){
printf("违法国度!\n");
return 0;
}
//合法返回是否空
return D->len == 0;
}
//添加狗子函数
int list_add(dogListPtr D,dog g){
//判断逻辑
if(NULL==D||list_full(D)){
printf("狗狗加入失败\n");
return 0;
}
//添加逻辑
printf("开始录入狗信息:\n");
printf("请输入狗名:");
scanf("%s",D->d[D->len].name);
printf("请输入狗的定价:");
scanf("%lf",&D->d[D->len].prince);
printf("请输入狗的年龄:");
scanf("%d",&D->d[D->len].age);
printf("请输入狗的品种:");
scanf("%s",D->d[D->len].breed);
//将新狗的信息全部放入最后一个位置成功后
//表的变化
D->len++;
printf("狗狗加入成功\n");
return 1;
}
//遍历所有狗狗函数
void list_show(dogListPtr D){
if(NULL==D || list_empty(D)){
printf("找不到狗狗,查看狗狗失败!\n");
return;
}
printf("名字\t价格\t年龄\t品种\n");
for(int i=0;i<D->len;i++){
printf("%s\t%.2lf\t%d\t%s\n",D->d[i].name,
D->d[i].prince,
D->d[i].age,D->d[i].breed);
}
}
//按狗名查狗函数,返回狗在表中的位置
int list_searvh_value(dogListPtr D,char name[MAX]){
//判断逻辑
if(NULL==D || list_empty(D))
{
printf("查找失败\n");
return -1;
}
//查找逻辑
printf("名字\t价格\t年龄\t品种\n");
for(int i=0; i<D->len; i++)
{
//判断元素是否跟要查找的值相等
if(strcmp(name,D->d[i].name)==0)
{
printf("%s\t%.2lf\t%d\t%s\n",D->d[i].name,
D->d[i].prince,
D->d[i].age,D->d[i].breed);
return i;
}
}
printf("查无此狗\n");
return -1; //没找到返回-1
}
//删除指定位置的狗函数
int list_delete_pos(dogListPtr D,int pos){
//判断逻辑
if(NULL==D || list_empty(D) || pos<0 || pos>=D->len)
{
printf("购买失败\n");
return 0;
}
//删除逻辑
for(int i=pos+1; i<D->len; i++)
{
D->d[i-1] = D->d[i]; //将元素前移一格
}
//表的变化
D->len--;
printf("购买成功\n");
return 1;
}
//按特定种类查狗函数,输出这个种类的所有狗狗信息
int list_searvh_breed(dogListPtr D,char breed[MAX]){
//判断逻辑
if(NULL==D || list_empty(D))
{
printf("查找失败\n");
return -1;
}
//查找逻辑
int flag=0;
printf("名字\t价格\t年龄\t品种\n");
for(int i=0; i<D->len; i++)
{
//判断元素是否跟要查找的值相等
if(strcmp(breed,D->d[i].breed)==0)
{
printf("%s\t%.2lf\t%d\t%s\n",D->d[i].name,
D->d[i].prince,
D->d[i].age,D->d[i].breed);
flag=1;
}
}
if(flag==0){printf("不好意思,没有此等狗\n");return -1;}
return 1;
}
//释放表
void list_free(dogListPtr D){
if(NULL!=D){
free(D);
D=NULL;
}
printf("后台狗释放成功\n");
}
//按指定价格区间查狗函数,返回这个价格区间之内的所有狗狗信息
int list_searvh_price(dogListPtr D,double fprince,double bprince){
//判断逻辑
if(NULL==D || list_empty(D))
{
printf("查找失败\n");
return -1;
}
//查找逻辑
int flag=0;
printf("名字\t价格\t年龄\t品种\n");
for(int i=0; i<D->len; i++)
{
//判断元素是否跟要查找的值相等
if(D->d[i].prince>=fprince&&D->d[i].prince<=bprince)
{
printf("%s\t%.2lf\t%d\t%s\n",D->d[i].name,
D->d[i].prince,
D->d[i].age,D->d[i].breed);
flag=1;
}
}
if(flag==0){printf("不好意思,本国还没有这种身价的狗\n");return -1;}
return 1;
}
main.c(测试文件):
#include "dog.h"
int main(int argc, const char *argv[])
{
//申请狗狗顺序表
dogListPtr D=list_create();
while(1){
printf("*************欢迎来到狗狗的国度*************\n");
printf("*************挑选一只可爱的狗狗*************\n");
int a;
printf("本系统有以下功能:\n0:退出本系统;\n1:显示特定种类的所有狗子;\n2:显示特定价格区间的狗狗;\n3:显示所有狗狗\n4:选好了,要买狗;\n5:我要添加狗狗\n");
printf("请输入你想要用的功能的序号:");
scanf("%d",&a);
switch(a){
case 0:
list_free(D);
D=NULL;
return 0;
case 1:
printf("*************欢迎来到种类之家*************\n");
char breed[MAX];
printf("请输入你想要查看的一种狗狗种类:");
scanf("%s",breed);
list_searvh_breed(D,breed);
break;
case 2:
printf("*************欢迎来到身价之家*************\n");
double fro,back;
printf("请输入你想要查看的最低身价:");
scanf("%lf",&fro);
printf("请输入你想要查看的最高身价:");
scanf("%lf",&back);
list_searvh_price(D,fro,back);
break;
case 3:
printf("*************欢迎来到狗狗大厅*************\n");
list_show(D);
break;
case 4:
printf("*************欢迎来到契约之家*************\n");
char name[MAX];
printf("请输入你要签订契约的狗狗姓名:");
scanf("%s",name);
list_delete_pos(D,list_searvh_value(D,name));
break;
case 5:
printf("*************欢迎来到养育之家*************\n");
dog g;
list_add(D,g);
break;
default:
printf("请输入有效数字,输入多次无效数字会被狗狗咬哦~\n");
}
printf("输入0退出系统,输入其他数字继续调侃本系统,请输入:");
scanf("%d",&a);
if(a==0){
list_free(D);
D=NULL;
return 0;
}
}
return 0;
}
运行结果:
linux@linux:~/study/abc/homework$ gcc *.c
linux@linux:~/study/abc/homework$ ./a.out
恭喜你成功创建了新的狗狗国度!
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:5
*************欢迎来到养育之家*************
开始录入狗信息:
请输入狗名:小黄
请输入狗的定价:100
请输入狗的年龄:3
请输入狗的品种:金毛
狗狗加入成功
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:5
*************欢迎来到养育之家*************
开始录入狗信息:
请输入狗名:小菜
请输入狗的定价:1000
请输入狗的年龄:2
请输入狗的品种:马尔济斯
狗狗加入成功
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:5
*************欢迎来到养育之家*************
开始录入狗信息:
请输入狗名:巧巧
请输入狗的定价:500
请输入狗的年龄:2
请输入狗的品种:阿拉斯加
狗狗加入成功
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:5
*************欢迎来到养育之家*************
开始录入狗信息:
请输入狗名:大黄
请输入狗的定价:10
请输入狗的年龄:5
请输入狗的品种:中华田园犬
狗狗加入成功
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:5
*************欢迎来到养育之家*************
开始录入狗信息:
请输入狗名:白菜
请输入狗的定价:15
请输入狗的年龄:3
请输入狗的品种:中华田园犬
狗狗加入成功
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:3
*************欢迎来到狗狗大厅*************
名字 价格 年龄 品种
小黄 100.00 3 金毛
小菜 1000.00 2 马尔济斯
巧巧 500.00 2 阿拉斯加
大黄 10.00 5 中华田园犬
白菜 15.00 3 中华田园犬
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:
1
*************欢迎来到种类之家*************
请输入你想要查看的一种狗狗种类:中华田园犬
名字 价格 年龄 品种
大黄 10.00 5 中华田园犬
白菜 15.00 3 中华田园犬
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:2
*************欢迎来到身价之家*************
请输入你想要查看的最低身价:10
请输入你想要查看的最高身价:50
名字 价格 年龄 品种
大黄 10.00 5 中华田园犬
白菜 15.00 3 中华田园犬
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:4
*************欢迎来到契约之家*************
请输入你要签订契约的狗狗姓名:白菜
名字 价格 年龄 品种
白菜 15.00 3 中华田园犬
购买成功
输入0退出系统,输入其他数字继续调侃本系统,请输入:1
*************欢迎来到狗狗的国度*************
*************挑选一只可爱的狗狗*************
本系统有以下功能:
0:退出本系统;
1:显示特定种类的所有狗子;
2:显示特定价格区间的狗狗;
3:显示所有狗狗
4:选好了,要买狗;
5:我要添加狗狗
请输入你想要用的功能的序号:3
*************欢迎来到狗狗大厅*************
名字 价格 年龄 品种
小黄 100.00 3 金毛
小菜 1000.00 2 马尔济斯
巧巧 500.00 2 阿拉斯加
大黄 10.00 5 中华田园犬
输入0退出系统,输入其他数字继续调侃本系统,请输入:0
后台狗释放成功
二、思维导图