数据结构|简单体育器材管理系统

简单体育器材管理系统:
今天分享的是简单体育器材管理系统的程序设计:
1.题目:
在这里插入图片描述

2.基本功能流程图:
在这里插入图片描述
3.数据文件:
在这里插入图片描述

4.源代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/单链表数据类型/
typedef struct
{
int number; //编号
char name[20]; //名称
float price; //单价
char kind[29]; //类别
char state[20]; //状态
char factory[20]; //生产厂家
char date[20]; //购买日期
}datatype;

/单链表的结点类型/
typedef struct node
{
datatype data; //数据域
struct node *next; //指针域
}LinkNode,*LinkList;

/带表头的单链表的基本运算函数声明/
void LinkList_initList(); //置一个带头结点的空表
void createList(LinkList head); //建立一个单链表
void sort(LinkList head); //按编号对所有体育器材的信息进行排序
void find(LinkList head); //分别编号,名称,类别条件查找体育器材信息
void update(LinkList head); //按编号对某个体育器材的某些信息进行修改
void insertX(LinkList head); //加入新体育器材的信息
void deleteX(LinkList head); //按编号删除已报废的体育器材的信息
void printList(LinkList head); //输出所有体育器材的信息
void amount(LinkList head); //输出某生产厂家某类别体育器材的数量并输出
void save(LinkList head,char a[20]); //保存所有信息
void welcome(LinkList head); //主菜单界面

void welcome(LinkList head)//欢迎界面
{
LinkList p;
char a[20]={“records.txt”};
int i;
p=head;
printf("\n<功能选择>");
printf("\n******************************");
printf("\n1.排序 2.查询 3.更新 \n4.插入 5.删除 6.浏览 \n7.统计 8.保存 0.结束\n");
printf("******************************\n\n");
printf(“请选择要进行的操作(序号对应,输入序号): “);
scanf(”%d”,&i);
switch(i)
{
case 1:sort§;break;
case 2:find§;break;
case 3:update§;break;
case 4:insertX§;break;
case 5:deleteX§;break;
case 6:printList§;break;
case 7:amount(head);break;
case 8:save(head,a);break;
case 0:return ;break;
default:printf("\n您输入的信息有误,请重新输入\n");
welcome§;
}
welcome§;
}

LinkList initList()//置空表
{
LinkList p;
p=(LinkList)malloc(sizeof(LinkNode));
p->next=NULL;
return p;
}

int main()
{
LinkList head; //定义链表指针
head=initList(); //初始化头结点
createList(head); //建立一个单链表
printf(“初始体育器材信息:\n”);
printList(head); //浏览体育器材信息
welcome(head); //使用体育器材管理系统
return 0;
}

void Error(char *s)
{
printf("\n %s", s);
exit(1); /返回DOS,该函数定义在stdlib.h中/

}

void createList(LinkList head)//创建单链表
{
FILE *fp;

    int number;                 //编号
    char name[20];              //名称
    float price;                //单价
    char kind[29];              //类别
    char state[20];             //状态
    char factory[20];           //生产厂家
    char date[20];              //购买日期
LinkList p;
if((fp=fopen("records.txt","r"))==NULL)
{ Error("can not open file !");
  return ;
}
while(!feof(fp))
{
	fscanf(fp,"%d %s %f %s %s %s %s",&number,name,&price,kind,state,factory,date);
	//读取文件数据
	p=(LinkList)malloc(sizeof(LinkNode));
	p->data.number=number;//赋值操作
    strcpy(p->data.name,name);//复制函数
    p->data.price=price;
    strcpy(p->data.kind,kind);
    strcpy(p->data.state,state);
    strcpy(p->data.factory,factory);
    strcpy(p->data.date,date);
	p->next=head->next;
	head->next=p;
}
fclose(fp);

}

void sort(LinkList head)//排序函数的设计
{

LinkList q,p,u;
p=head->next;
head->next=NULL;//利用原表头结点建新的空表
while(p)
{
    q=p;//q为被插入的结点
    p=p->next;//用p记录后继结点
    //遍历新链表查找插入位置
    u=head;
    while(u->next!=NULL)//查找插入位置(降序)
    {
        if(u->next->data.number>q->data.number)
            break;
        u=u->next;
    }
    //插入在u结点的后面
    q->next=u->next;
    u->next=q;
}
printList(head);  //输出排序后的单链表

}

void find(LinkList head)//查询函数的设计(7个数据的查询)
{
int number,num;
float price;
char name[20],kind[29],state[20],factory[20],date[20];
LinkList p;
p=head->next;//将p指向头结点的next
printf("\n(1.编号 2.名称 3.单价 4.类别 5.状态 6.生产厂家 7.购买日期)\n");
printf(“请选择您要查询的信息项(输入序号):”);
scanf("%d",&number);//输入查询的信息项(大方向)

if(number==1)//编号查询
    {
        printf("请输入您要查询的体育器材编号:");
        scanf("%d",&num);//输入第几个编号
        printf("编号  名称  单价  类别  状态  生产厂家  购买日期  \n\n");
        while(p)//输出新链表
        {
            if(p->data.number==num)
            {
                printf(" %d   %s   %f    %s   %s  %s    %s  \n",
                p->data.number,p->data.name,p->data.price,
                p->data.kind,p->data.state,p->data.factory,p->data.date);
            }
            p=p->next;
        }
    }
else if(number==2)//名称查找
    {
        printf("请输入您要查询的体育器材名称:");
        scanf("%s",name);
        printf("编号  名称  单价  类别  状态  生产厂家  购买日期  \n\n");
        while(p)//同理
        {
            if(strcmp(p->data.name,name)==0)//字符数组用strcmp函数 即相等的话则输出
            {
		    	printf(" %d   %s   %f    %s   %s  %s    %s  \n",
                p->data.number,p->data.name,p->data.price,
                p->data.kind,p->data.state,p->data.factory,p->data.date);
            }
        p=p->next;
        }
    }

else if(number==3)//单价查找
   {
        printf("请输入您要查询的体育器材单价:");
        scanf("%f",&price);
        printf("编号  名称  单价  类别  状态  生产厂家  购买日期  \n\n");
        while(p)
        {
            if(p->data.price==price)
            {
                printf(" %d   %s   %f    %s   %s  %s    %s  \n",
                p->data.number,p->data.name,p->data.price,
                p->data.kind,p->data.state,p->data.factory,p->data.date);
            }
				p=p->next;
        }
    }
else if(number==4)//类别查找
    {
        printf("请输入您要查询的体育器材类别:");
        scanf("%s",kind);
        printf("编号  名称  单价  类别  状态  生产厂家  购买日期  \n\n");
        while(p)
        {
            if(p->data.kind==kind)
            {
                printf(" %d   %s   %f    %s   %s  %s    %s  \n",
                p->data.number,p->data.name,p->data.price,
                p->data.kind,p->data.state,p->data.factory,p->data.date);
            }
        p=p->next;
        }
    }
else if(number==5)//职业查找
    {
        printf("请输入您要查询的体育器材状态:");
        scanf("%s",state);
        printf("编号  名称  单价  类别  状态  生产厂家  购买日期  \n\n");
        while(p)
        {
            if(strcmp(p->data.state,state)==0)
            {
                printf(" %d   %s   %f    %s   %s  %s    %s  \n",
                p->data.number,p->data.name,p->data.price,
                p->data.kind,p->data.state,p->data.factory,p->data.date);
            }
             p=p->next;
        }
    }
else if(number==6)//爱好查找
    {
        printf("请输入您要查询的体育器材生产厂家:");
        scanf("%s",factory);
        printf("编号  名称  单价  类别  状态  生产厂家  购买日期  \n\n");
        while(p)
        {
            if(strcmp(p->data.factory,factory)==0)
            {
                printf(" %d   %s   %f    %s   %s  %s    %s  \n",
                p->data.number,p->data.name,p->data.price,
                p->data.kind,p->data.state,p->data.factory,p->data.date);
            }
             p=p->next;
        }
    }
else if(number==7)//发帖数量查找
    {
        printf("请输入您要查询的体育器材购买日期:");
        scanf("%s",date);
        printf("编号  名称  单价  类别  状态  生产厂家  购买日期  \n\n");
        while(p)
        {
            if(p->data.date==date)
            {
                printf(" %d   %s   %f    %s   %s  %s    %s  \n",
                p->data.number,p->data.name,p->data.price,
                p->data.kind,p->data.state,p->data.factory,p->data.date);
            }
            p=p->next;
        }
    }
else//如果都不是 则输出错误 并再进入到inquire函数中
    {
        printf("\n您的输入有误,请重新输入。\n");
        find(p);
    }

}

void update(LinkList head)//更新函数
{
LinkList p;
p=head->next;
int number;
float price;
char name[20],kind[10],state[19],factory[10],date[19];
printf(“请输入你要更新的体育器材编号:”);
scanf("%d",&number);
while§
{
if(p->data.number==number)//字符数组用strcmp比较函数 即相等的话则输出
{
printf(“编号 名称 单价 类别 状态 生产厂家 购买日期 \n”);
scanf("%d %s %f %s %s %s %s",&number,name,&price,kind,state,factory,date);
p->data.number=number;
strcpy(p->data.name,name);
p->data.price=price;
strcpy(p->data.kind,kind);
strcpy(p->data.state,state);
strcpy(p->data.factory,factory);
strcpy(p->data.date,date);
printf(“编号 名称 单价 类别 状态 生产厂家 购买日期 \n\n”);
printList(head);
}
p=p->next;
}
}

void insertX(LinkList head)//(尾插)插入函数
{
int flag=0;
datatype New;//数据类型
LinkList p,q,lp;//指针类型
int number;
float price;
char name[20],kind[29],state[20],factory[20],date[20];
printf(“编号 名称 单价 类别 状态 生产厂家 购买日期 \n”);
scanf("%d %s %d %s %s %s %s",&New.number,New.name,&New.price,New.kind,New.state,New.factory,New.date);
lp=(LinkList)malloc(sizeof(LinkNode));//建立一个结点
lp->data=New;
q=head;
p=head->next;
while(p!=NULL)
{
if(p->data.number == New.number)
{
lp->next=q->next;
q->next=lp;
printf("\n插入新的体育器材信息成功!\n");
flag=1;
break;
}
else
{
p=p->next;
q=q->next;
}
}
if(flag==0)
{
lp->next=q->next;
q->next=lp;
printf("\n插入新的体育器材信息成功!\n");
}
printList(head);

}

void deleteX(LinkList head)//按编号删除已报废的体育器材的信息
{
LinkList p,q,v;
int number;
printf(“请输入要删除指定体育器材的编号:”);
scanf("%d",&number);
printf("\n编号 名称 单价 类别 状态 生产厂家 购买日期 \n");
q=head;
p=head->next;
while§
{
if(p->data.number==number)
{
v=p;
p=p->next;
q->next=p;
free(v);
}
else
{
q=p;
p=p->next;
}
}
printList(head);
}

void printList(LinkList head)//浏览所有体育器材信息
{
LinkList p=head->next;
while(p!=NULL)
{
printf("%d %s %f %s %s %s %s\n",p->data.number,p->data.name,p->data.price,p->data.kind,p->data.state,p->data.factory,p->data.date);
p=p->next;
}
}

void amount(LinkList head)//统计函数
{
LinkList p;
p=head->next;
int count=0;
char factory[10],kind[10];
printf(“请输入你要搜索的生产厂家和种类:”);
scanf("%s %s",factory,kind);
while§
{
if(strcmp(p->data.factory,factory)==0)
{
if(strcmp(p->data.kind,kind)==0)
{
count++;
}
}
p=p->next;
}
printf(“输出%s厂家的%s器材数量为:%d\n”,factory,kind,count);
}

void save(LinkList head,char a[])//保存文件函数
{
FILE *fp;
LinkList p;
if((fp=fopen(a,“w”))==NULL)
{ printf(“不能打开文件!”);
return ;
}
p=head->next;
while(p!=NULL)
{
fprintf(fp,"%d %s %f %s %s %s %s\n",p->data.number,p->data.name,p->data.price,p->data.kind,p->data.state,p->data.factory,p->data.date);
p=p->next;
}
fclose(fp);
}

  • 5
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个简单体育器材管理系统的代码示例,使用了C语言和数据结构: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> struct equipment { char name[20]; int quantity; float price; }; void addEquipment(struct equipment* arr, int* count); void removeEquipment(struct equipment* arr, int* count); void displayInventory(struct equipment* arr, int count); int main() { struct equipment inventory[50]; int choice, count = 0; do { printf("Please choose an option:\n"); printf("1. Add equipment\n"); printf("2. Remove equipment\n"); printf("3. Display inventory\n"); printf("4. Quit\n"); scanf("%d", &choice); switch(choice) { case 1: addEquipment(inventory, &count); break; case 2: removeEquipment(inventory, &count); break; case 3: displayInventory(inventory, count); break; case 4: printf("Exiting program...\n"); break; default: printf("Invalid choice. Please enter a number between 1 and 4.\n"); break; } } while(choice != 4); return 0; } void addEquipment(struct equipment* arr, int* count) { char name[20]; int quantity; float price; printf("Enter equipment name: "); scanf("%s", name); printf("Enter quantity: "); scanf("%d", &quantity); printf("Enter price: "); scanf("%f", &price); strcpy(arr[*count].name, name); arr[*count].quantity = quantity; arr[*count].price = price; (*count)++; printf("Equipment added successfully.\n"); } void removeEquipment(struct equipment* arr, int* count) { char name[20]; int i, j; int found = 0; printf("Enter equipment name to remove: "); scanf("%s", name); for(i = 0; i < *count; i++) { if(strcmp(arr[i].name, name) == 0) { found = 1; break; } } if(found) { for(j = i; j < *count - 1; j++) { arr[j] = arr[j+1]; } (*count)--; printf("Equipment removed successfully.\n"); } else { printf("Equipment not found.\n"); } } void displayInventory(struct equipment* arr, int count) { int i; if(count == 0) { printf("Inventory is empty.\n"); } else { printf("Inventory:\n"); for(i = 0; i < count; i++) { printf("%s (%d): $%.2f\n", arr[i].name, arr[i].quantity, arr[i].price); } } } ``` 该程序使用了一个 `struct equipment` 结构体来存储每个器材的名称、数量和价格。它包含了三个函数,分别用于添加器材、删除器材和显示库存清单。在 `main` 函数中,使用一个循环来不断显示菜单,直到用户选择退出程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值