900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 数据结构与算法课程设计C语言之体育器材管理系统

数据结构与算法课程设计C语言之体育器材管理系统

时间:2020-09-08 03:26:58

相关推荐

数据结构与算法课程设计C语言之体育器材管理系统

#include <stdio.h>#include <stdlib.h>#include <string.h>//单链表数据类型/typedef struct {int number; //编号char name[20]; //名称double price; //单价char kind[29]; //学号char state[20]; //姓名char factory[20]; //数量char date[20]; //日期} datatype;//单链表的结点类型/typedef struct node {datatype data; //数据域struct node *next; //指针域} LinkNode,*LinkList;//单链表数据类型/typedef struct {int numbera; //编号char namea[20]; //名称double pricea; //单价char kinda[29]; //数量char statea[20]; //状态char factorya[20]; //生产厂家char datea[20]; //购买日期} datatypea;//单链表的结点类型/typedef struct nodea {datatypea data; //数据域struct nodea *next; //指针域} LinkNodea,*LinkLista;//单链表数据类型/typedef struct {int number; //编号char name[20]; //名称double price; //单价char kind[29]; //学号char state[20]; //姓名char factory[20]; //数量char date[20]; //日期} datatype2;//单链表的结点类型/typedef struct nodeb {datatype data; //数据域struct nodeb *next; //指针域} LinkNodeb,*LinkListb;LinkList initList() { //库存表LinkList p;p=(LinkList)malloc(sizeof(LinkNode));p->next=NULL;return p;}LinkLista initLista() { //借出表LinkLista p;p=(LinkLista)malloc(sizeof(LinkNodea));p->next=NULL;return p;}LinkListb initListb() { //归还表LinkListb p;p=(LinkListb)malloc(sizeof(LinkNodeb));p->next=NULL;return p;}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 printLista(LinkLista heada) { //浏览所有借出体育器材信息LinkLista p=heada->next;while(p!=NULL) {printf("%d %s %f %s %s %s %s\n",p->data.numbera,p->data.namea,p->data.pricea,p->data.kinda,p->data.statea,p->data.factorya,p->data.datea);p=p->next;}}void printListb(LinkListb headb) { //浏览所有归还体育器材信息LinkListb p=headb->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 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) {printf("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 createLista(LinkLista heada) { //创建单链表int numbera; //编号char namea[20]; //名称float pricea;//单价char kinda[29]; //学号char statea[20]; //姓名char factorya[20]; //数量char datea[20]; //日期}void createListb(LinkListb headb) { //创建单链表int number; //编号char name[20]; //名称float price;//单价char kind[29]; //学号char state[20]; //姓名char factory[20]; //数量char date[20]; //日期}void deleteXjc(LinkList head) { //按编号删除已报废的体育器材的信息LinkList p,q,v;int number;printf("请输入要删除借出体育器材的编号:");scanf("%d",&number);printf("\n编号 名称 单价 学号 姓名 数量 日期 \n");q=head;p=head->next;while(p) {if(p->data.number==number) {v=p;p=p->next;q->next=p;free(v);} else {q=p;p=p->next;}}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(p) {if(p->data.number==number) {v=p;p=p->next;q->next=p;free(v);} else {q=p;p=p->next;}}printList(head);}void deleteXgh(LinkLista heada) { //按编号删除已报废的体育器材的信息LinkLista p,q,v;int number;printf("请输入要删除归还体育器材的编号:");scanf("%d",&number);printf("\n编号 名称 单价 学号 姓名 数量 日期 \n");q=heada;p=heada->next;while(p) {if(p->data.numbera==number) {v=p;p=p->next;q->next=p;free(v);} else {q=p;p=p->next;}}printLista(heada);}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指向头结点的nextprintf("\n(1.编号 2.名称 3.单价 4.类别 5.数量 6.生产厂家 7.购买日期)\n");printf("请选择您要查询的信息项(输入序号):");scanf("%d",&number);//输入查询的信息项(大方向)if(number==1) { //编号查询printf("请输入您要查询的体育器材编号:");scanf("%d",&num);//输入第几个编号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);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);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);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);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);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 switchfind(LinkList head,LinkLista heada,LinkListb headb) {int i;printf("请输入查询类型:\n 1:库存查询 2:借出查询 3:归还查询 : ");scanf("%d",&i);switch(i) {case 1:printf("编号 名称 单价 类别 状态 生产厂家 购买日期 \n\n");find(head);break;case 2:printf("编号 名称 单价 数量 学号 姓名 日期 \n\n");printLista(heada);break;case 3:printf("编号 名称 单价 数量 学号 姓名 日期 \n\n");printListb(headb);break;}}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(p) {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];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 insertXa(LinkLista heada) { //(尾插)插入函数int flag=0;datatypea New;//数据类型LinkLista p,q,lp;//指针类型int number;float price;char namea[20],kinda[29],statea[20],factorya[20],datea[20];scanf("%d %s %d %s %s %s %s",&New.numbera,New.namea,&New.pricea,New.kinda,New.statea,New.factorya,New.datea);lp=(LinkLista)malloc(sizeof(LinkNodea));//建立一个结点lp->data=New;q=heada;p=heada->next;while(p!=NULL) {if(p->data.numbera == New.numbera) {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");}printLista(heada);}void insertXb(LinkListb headb) { //(尾插)插入函数int flag=0;datatype New;//数据类型LinkListb p,q,lp;//指针类型int number;float price;char name[20],kind[29],state[20],factory[20],date[20];scanf("%d %s %d %s %s %s %s",&New.number,New.name,&New.price,New.kind,New.state,New.factory,New.date);lp=(LinkListb)malloc(sizeof(LinkNodeb));//建立一个结点lp->data=New;q=headb;p=headb->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");}printListb(headb);}void amount(LinkList head) { //统计函数LinkList p;p=head->next;int count=0;char factory[10],kind[10];printf("请输入你要搜索的生产厂家和种类:");scanf("%s %s",factory,kind);while(p) {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 amounta(LinkLista heada) { //统计函数LinkLista p;p=heada->next;int count=0;char factory[10],kind[10];printf("请输入你要搜索的生产厂家和种类:");scanf("%s %s",factory,kind);while(p) {if(strcmp(p->data.factorya,factory)==0) {if(strcmp(p->data.kinda,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("records.txt","w"))==NULL) {printf("不能打开文件!");}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);}void jiechu(LinkLista heada, LinkList head) {printf("编号 名称 单价 数量 学号 姓名 日期 \n\n");insertXa(heada);deleteXjc(head);}void gh(LinkListb headb,LinkList head,LinkLista heada) {printf("编号 名称 单价 数量 学号 姓名 日期 \n\n");insertXb(headb);insertX(head);deleteXgh(heada);}void insertX1(LinkList head) {printf("\n编号 名称 单价 类别 数量 生产厂家 购买日期 \n");insertX(head);}void welcome(LinkList head,LinkLista heada,LinkListb headb) { //欢迎界面LinkList p;char a[]= {"records.txt"};int i;p=head;printf("\n<功能选择>");printf("\n******************************");printf("\n1.排序 2.查询 3.更新 \n4.插入 5.删除 6.浏览 \n7.统计 8.保存 \n9.借出登记 10.归还登记 0.结束\n");printf("******************************\n\n");printf("请选择要进行的操作(序号对应,输入序号): ");scanf("%d",&i);switch(i) {case 1:sort(head);break;case 2:switchfind(head,heada,headb);break;case 3:update(head);break;case 4:insertX1(head);break;case 5:deleteX(head);break;case 6:printList(head);break;case 7:amount(head);break;case 8:save(head,a);break;case 9:jiechu(heada,head);break;case 10:gh(headb,head,heada);break;case 0:return ;break;break;default:printf("\n您输入的信息有误,请重新输入\n");welcome(head,heada,headb);}welcome(head,heada,headb);}int main() {LinkList head; //定义链表指针LinkLista heada;LinkListb headb;head=initList(); //初始化头结点createList(head); //建立一个单链表heada=initLista(); //初始化头结点createLista(heada); //建立一个单链表headb=initListb(); //初始化头结点createListb(headb); //建立一个单链表printf("初始体育器材信息:\n");printf("\n编号 名称 单价 类别 数量 生产厂家 购买日期 \n");printList(head); //浏览体育器材信息welcome(head,heada,headb); //使用体育器材管理系统return 0;}

这个课程设计仅供大家参考,如有疑问可以随时垂询!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。