#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->i