📄 gg.cpp
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct TVInfo
{
//int ids = 0;//编号
//float price = 0.0;//价格
//int num = 0; //数量
int ids;//编号
float price;//价格
int num; //数量
TVInfo* pNext;
};
TVInfo* pHead=NULL;//在这个链表里,为了安全,所有建立的指针初始都设置为空指针。
/**************************函数声明列表******************************/
#if 0
void ShowMainView(void); //主界面功能显示
void ShowMainSelect(int nSelect); //主界面功能选择Switch
void ExitSystem(); //退出。
TVInfo* CreatList(); //创建电视机库存系统
void ShowTVList(TVInfo* pHead); //遍历所有电视机列表
TVInfo* addTVInfo(TVInfo* pHead); //增加一个新的电视机信息,添加是挂到链表尾,考虑到空链表才返回一个头指针。
void FindTVInfoPrice(TVInfo* pHead); //按价格查找
void FindTVInfoNum(TVInfo* pHead); //按数量查找
void FindTVInfoIds(TVInfo* pHead); //按编号查找
TVInfo* DeleteTVInfo(TVInfo* pHead); //删除指定编号的电视机资料。
TVInfo* EditTVInfo(TVInfo* pHead); //修改指定学号的其学生资料。
TVInfo* LoadTVInfo(); //读取。位置是D盘1.txt
void SaveTV(TVInfo* pHead); //保存到D盘1.txt
void FreeTVInfo(TVInfo* pHead); //退出时候释放链表
#endif
void ShowMainView(void); //主界面功能显示
void ShowMainSelect(int nSelect); //主界面功能选择Switch
void ExitSystem(); //退出。
void CreatList(); //创建电视机库存系统
void ShowTVList( ); //遍历所有电视机列表
void addTVInfo(); //增加一个新的电视机信息,添加是挂到链表尾,考虑到空链表才返回一个头指针。
void FindTVInfoPrice(); //按价格查找
void FindTVInfoNum(); //按数量查找
void FindTVInfoIds(); //按编号查找
void DeleteTVInfo(); //删除指定编号的电视机资料。
void EditTVInfo(); //修改指定学号的其学生资料。
void LoadTVInfo(); //读取。位置是D盘1.txt
void SaveTV(); //保存到D盘1.txt
void FreeTVInfo(); //退出时候释放链表
/*********************************************************************/
/**************************主函数*************************************/
void main(void)
{
printf("\t\t\t*******************************************\n");
printf("\t\t\t\t欢迎使用本软件,谢谢!!\n");
printf("\t\t\t*******************************************\n");
printf("\n");
int nSelect = 0;
while(1)
{
ShowMainView();
printf("请选择:\t");
scanf("%d",&nSelect);
ShowMainSelect( nSelect );
}
//FreeTVInfo( pHead );//程序结束,释放链表
FreeTVInfo();//程序结束,释放链表
}
/**************************主界面功能显示**************************************/
void ShowMainView( void )
{
printf("1.创建电视机库存系统\n");
printf("2.按编号查找\n");
printf("3.按价格查找\n");
printf("4.按数量查找\n");
printf("5.遍历所有电视机列表\n");
printf("6.增加电视机信息\n");
printf("7.删除电视机信息\n");
printf("8.修改电视机信息\n");
printf("9.读入\n");
printf("10.保存\n");
printf("0.退出\n");
printf("\n\n\n");
}
/**************************主界面功能选择Switch**************************************/
void ShowMainSelect( int nSelect )
{
switch( nSelect )
{
#if 0
case 1:CreatList(); break;//创建电视机库存系统
case 2:FindTVInfoIds( pHead ); break;//按编号查找
case 3:FindTVInfoPrice( pHead ); break;//按价格查找
case 4:FindTVInfoNum( pHead ); break;//按数量查找
case 5:ShowTVList( pHead ); break;//遍历所有电视机列表
case 6:addTVInfo( pHead ); break;//增加一台新的电视机信息
case 7:DeleteTVInfo( pHead ); break;//删除电视机信息
case 8:EditTVInfo( pHead ); break;//修改电视机信息
case 9:LoadTVInfo(); break;//从文件读取
case 10:SaveTV( pHead ); break;//文件保存
case 0:ExitSystem(); break;//退出
default:printf("错误!没这个选项.\n\n");
#endif
case 1:CreatList(); break;//创建电视机库存系统
case 2:FindTVInfoIds(); break;//按编号查找
case 3:FindTVInfoPrice(); break;//按价格查找
case 4:FindTVInfoNum(); break;//按数量查找
case 5:ShowTVList(); break;//遍历所有电视机列表
case 6:addTVInfo(); break;//增加一台新的电视机信息
case 7:DeleteTVInfo(); break;//删除电视机信息
case 8:EditTVInfo(); break;//修改电视机信息
case 9:LoadTVInfo(); break;//从文件读取
case 10:SaveTV(); break;//文件保存
case 0:ExitSystem(); break;//退出
default:printf("错误!没这个选项.\n\n");
}
}
/**************************退出系统*********************************************/
void ExitSystem()
{
exit(1);
}
/**************************创建链表*********************************************/
//TVInfo* CreatList()
void CreatList()
{
printf("开始创建新的电视机入库信息,退出请输入 '0'.\n");
int ids = 0;
float price = 0.0;
int num = 0;
TVInfo* pTemp = NULL;
TVInfo* pJudge = NULL;
while(1)
{
TVInfo* pNewTV = new TVInfo;
pJudge = pHead;
printf("输入电视机的编号:\t");
scanf("%d",&ids);
printf("输入电视机的价格:\t");
scanf("%f",&price);
printf("输入电视机的数量:\t");
scanf("%d",&num);
printf("\n\n");
while(pJudge != NULL && pJudge->ids != ids)//判断学号是否重复
{
pJudge = pJudge->pNext;//指针移动到下个结点
}
if(pJudge != NULL && pJudge->ids == ids)//找到相同的的学号
{
printf("学号有重复,请重新输入\n");
delete pNewTV;//释放建立的新结点
}
else
{
if(ids < 0 || price < 0.0 || num < 0)
{
delete pNewTV;
printf("请检查,电视机的编号、价格或数量不能为负数\n");
}
else if(0 == ids || 0.0 == price || 0 == num)
{
delete pNewTV;
printf("创建完毕现在退回主菜单!\n");
break;//输入为零的时候退出创建
}
else
{
pNewTV->ids = ids;
pNewTV->price = price;
pNewTV->num = num;
pNewTV->pNext = NULL;
if(pHead==NULL)//建立头结点
{
pHead=pNewTV;
}
else
{
pTemp = pHead;
while(pTemp->pNext != NULL)//挂到链表尾巴
{
pTemp = pTemp->pNext;
}
pTemp->pNext = pNewTV;
}
}
}
}
//return pHead;
return;
}
/**************************遍历并打印链表*********************************************/
//void ShowTVList(TVInfo* pHead)
void ShowTVList()
{
TVInfo* pTemp = pHead;
if(pTemp == NULL)
{
printf("没有找到电视机信息!\n");
}
else
{
printf("编号\t价格\t数量\n");
while(pTemp != NULL)
{
printf("\n");
printf("%d\t%f\t%d\n",pTemp->ids,pTemp->price,pTemp->num);
pTemp = pTemp->pNext;
}
}
}
/**************************添加插入一个新的电视机资料*********************************************/
//TVInfo* addTVInfo(TVInfo* pHead)
void addTVInfo()
{
int ids = 0;
float price = 0.0;
int num = 0;
TVInfo* pTemp = pHead;
fflush(stdin);//在这里清空一次键盘缓冲区,老是在这里出毛病
printf("输入电视机编号:\t");
scanf("%d",&ids);
printf("输入电视机价格:\t");
scanf("%f",&price);
printf("输入电视机数量:\t");
scanf("%d",&num);
while(pTemp != NULL && pTemp->ids != ids)//判断学号是否重复
{
pTemp = pTemp->pNext;//指针移动到下个结点
}
if(pTemp != NULL && pTemp->ids == ids)//找到相同的的学号
{
printf("学号有重复,请重新输入\n");
delete pTemp;//释放建立的新结点
}
else
{
TVInfo* pNewNode = new TVInfo;
pNewNode->ids = ids;
pNewNode->price = price;
pNewNode->num = num;
pNewNode->pNext = NULL;
if(pHead == NULL)
{
pHead = pNewNode;
}
else
{
while(pTemp->pNext != NULL)//找出在最后一个结点
{
pTemp = pTemp->pNext;
}
pTemp->pNext = pNewNode;
}
}
//return pHead;
return;
}
/**************************按编号查找*********************************************/
//void FindTVInfoIds(TVInfo* pHead)
void FindTVInfoIds()
{
TVInfo* pTemp = pHead;
int ids = 0;
printf("你要查找的电视机的编号是: \t");
scanf("%d",&ids);
if(pHead == NULL)
{
printf("没有找到电视机的库信息\n");
}
else
{
for(pTemp = pHead;pTemp != NULL;pTemp = pTemp->pNext)
{
if(pTemp->ids == ids)
{
printf("你要找的电视机是:\n");
printf("编号:%d\t,价格:%f\t,数量:%d\n",pTemp->ids,pTemp->price,pTemp->num);
}
}
if(ids == 0)
{
printf("没有找到你要查找的信息\n");
}
}
}
/**************************按姓价格找*********************************************/
//void FindTVInfoPrice(TVInfo* pHead)
void FindTVInfoPrice()
{
TVInfo* pTemp = pHead;
float price = 0.0;
printf("你要查找的电视机的价格是: \t");
scanf("%f",&price);
if(pHead == NULL)
{
printf("没有找到电视机的库信息\n");
}
else
{
for(pTemp = pHead;pTemp != NULL;pTemp = pTemp->pNext)
{
if(pTemp->price == price)
{
printf("你要找的电视机是:\n");
printf("价格:%f\t,数量:%d\n",pTemp->price,pTemp->num);
}
}
if(price == 0.0)
{
printf("没有找到你要查找的信息\n");
}
}
}
/**************************按数量查找*********************************************/
//void FindTVInfoNum(TVInfo* pHead)
void FindTVInfoNum()
{
TVInfo* pTemp = pHead;
int num = 0;
printf("你要查找的电视机数量是: \t");
scanf("%d",&num);
if(pHead == NULL)
{
printf("没有找到电视机的库信息\n");
}
else
{
for(pTemp = pHead;pTemp != NULL ;pTemp = pTemp->pNext)
{
if(pTemp->num == num)
{
printf("你要找的电视机是:");
printf("价格:%f\t,数量:%d\n",pTemp->price,pTemp->num);
}
}
if(num == 0)
{
printf("没有找到你要查找的信息\n");
}
}
}
/**************************删除结点*********************************************/
void DeleteTVInfo()
{
int ids = 0;
printf("输入你要删除的电视机编号:\n");
scanf("%d",&ids);
TVInfo* pTemp = NULL;
if(pHead == NULL)//空链表时
{
printf("不存在电视机库信息\n");
delete pTemp;
//return pHead;
return;
}
if(pHead->ids == ids)//存在链表,但是删除的结点为头结点时
{
pTemp = pHead;
pHead = pHead->pNext;
delete pTemp;
printf("删除成功\n");
//return pHead;
return;
}
//需要删除的结点不是以上俩情况时,就进入下面的FOR循环来进行链表的遍历
for(TVInfo* pGuard = pHead;pGuard->pNext != NULL;pGuard = pGuard->pNext) //遍历整个链表
{
if(pGuard->pNext->ids == ids)//通过前个结点来删除
{
pTemp = pGuard->pNext;
pGuard->pNext = pTemp->pNext;
delete pTemp;
printf("删除成功\n");
//return pHead;
return;
}
}
//return pHead;
return;
}
/**************************修改结点*********************************************/
//TVInfo* EditTVInfo(TVInfo* pHead)//在这里为了熟练专门用了FOR循环来做
void EditTVInfo()//在这里为了熟练专门用了FOR循环来做
{
TVInfo* pTemp = pHead;
int ids = 0;
float price = 0.0;
int num = 0;
printf("请输入你要修改电视机的编号:\t");
scanf("%d",&ids);
if(pHead == NULL)
{
printf("没有找到电视机的库信息!\n");
//return pHead;
return;
}
else
{
for(pTemp = pHead;pTemp->pNext != NULL;pTemp = pTemp->pNext)//寻找电视机资料,且找的不是最后一个
{
if(pTemp->ids == ids)
{
printf("你要修改的电视机信息是:");
printf("%d\t%f\t%d\n",pTemp->ids,pTemp->price,pTemp->num);
printf("输入新编号:");
scanf("%d",&ids);
printf("输入新价格:");
scanf("%f",&price);
printf("输入新数量");
scanf("%d",&num);
pTemp->ids = ids;
pTemp->price = price;
pTemp->num = num;
printf("你修改的内容为:\n");
printf("%d\t%f\t%d\n",pTemp->ids,pTemp->price,pTemp->num);
//return pHead;
return;
}
}
if(pTemp->ids == ids)//看最后一个结点是否符合按学号查找的结点
{
printf("你要修改的电视机的资料是:");
printf("编号:%d\t,价格:%f,数量:%d\n",pTemp->ids,pTemp->price,pTemp->num);
printf("输入新编号:");
scanf("%d",&ids);
printf("输入新价格");
scanf("%f",&price);
printf("输入新数量");
scanf("%d",&num);
pTemp->ids = ids;
pTemp->price = price;
pTemp->num = num;
printf("你修改的内容为:\n");
printf("%d\t%f\t%d\n",pTemp->ids,pTemp->price,pTemp->num);
//return pHead;
return;
}
else
{
printf("你所输入的信息不存在!\n");
//return pHead;
return;
}
}
}
/**************************从D盘1.txt文本文件中读取数据到链表******************************/
//TVInfo* LoadTVInfo()
void LoadTVInfo()
{
FILE* fp = fopen("d:\\save.txt","r");
if(fp == NULL)
{
printf("Can't open the file!\n");
}
else
{
int ids;
float price = 0.0;
int num = 0;
while(1)
{
TVInfo* pTemp = new TVInfo;
int nRes = fscanf(fp,"%d%f%d",&ids,&price,&num);
if(nRes == -1)
{
break;
}
pTemp->ids = ids;
pTemp->price = price;
pTemp->num = num;
pTemp->pNext = NULL;
if(pHead == NULL)
{
pHead = pTemp;
}
else
{
TVInfo* pFront = pHead;
while(pFront->pNext != NULL)
{
pFront = pFront->pNext;
}
pFront->pNext = pTemp;
}
}
fclose(fp);
}
//return pHead;
return;
}
/**************************保存到D盘1.txt文本文件中去******************************************/
//void SaveTV(TVInfo* pHead)
void SaveTV()
{
FILE* fp = fopen("d:\\save.txt","w");
TVInfo* pTemp = pHead;
if(fp == NULL)
{
printf("Can't open the file!\n");
exit(1);
}
else
{
while(pTemp != NULL)
{
fprintf(fp,"\t%d\t",pTemp->ids);
fprintf(fp,"%f\t",pTemp->price);
fprintf(fp,"%d\n",pTemp->num);
pTemp = pTemp->pNext;
}
fclose(fp);
}
}
/**************************退出时候释放链表******************************************/
//void FreeTVInfo(TVInfo* pHead)
void FreeTVInfo()
{
TVInfo* pTemp = NULL;
while(NULL != pHead)
{
pTemp = pHead;
pHead = pHead->pNext;
delete pTemp;
}
pTemp = NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -