下面是我做的一个货物管理系统,我是个初学者,主要是靠学长和老师的帮助。虽然很简陋,
但也算做出来了。至里面有很多不当之处还望大神指点。
#include <stdio.h>
#include <stdlib.h> 这是头文件
#include <string.h>
#include <malloc.h>
#define LEN sizeof(struct cargo)
typedef struct cargo //货物信息
{
char sno[20]; // 货物编号
char sname[20]; //货物名称
float scost; //货物价格
int snum; //货物数量
struct cargo *next;
}stu;
void meau(stu *head); //显示菜单
void choose(stu*head); //功能选择
stu *create_head(); //创建头节点
void input_head(intn,stu *head); //录入信息
void InsterStu(stu*head); //添加信息
void serch_message(stu*head); //查询
void serch_num(stu*head); //按编号查询
void serch_name(stu*head); //按名称查询
void revise(stu*head); //修改信息
void delete_head(stu*head); //删除信息
void write_file(stu*head); //保存文件
stu*read__file(); //读取文件内的信息
void free1(stu*head); //释放空间
void print(stu *head); //输出连表信息
int main() //主函数
{
stu *head;
head=(stu*)malloc(LEN);
head=create_head();
meau(head);
system("pause");
}
void meau(stu *head) //显示菜单
{
printf(" ==欢===========迎===========使===========用====\n");
printf(" 货物信息处理系统 \n");
printf(" ====================================================\n\n");
while(1)
{
printf("\t========================================\n");
printf("\t---------------1,录入货物信息-----------\n");
printf("\t---------------2,查找货物信息-----------\n");
printf("\t---------------3,修改货物信息-----------\n");
printf("\t---------------4,删除货物信息-----------\n");
printf("\t---------------5,保存文件---------------\n");
printf("\t---------------6,读取信息---------------\n");
printf("\t---------------7,输出链表---------------\n");
printf("\t---------------0,退出程序---------------\n");
printf("\t-=======================================\n");
printf("\t请输入你的选择:\n");
choose(head);
}
}
这是上面函数运行的结果:
void choose(stu *head) //功能选择
{
int h;
int i,n;
scanf("%d",&h);
switch(h)
{
case1: printf("你想录入几组信息:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
input_head(i,head);
break;
case2: serch_message(head);
break;
case3: revise(head);
break;
case4: delete_head(head);
write_file(head);
print(head);
break;
case5:
write_file(head);
printf("\t\t保存信息成功!\t\n");
break;
case6: head->next=read__file();
print(head);
break;
case 7: print(head);
break;
case0: free1(head);
printf("\t-----已经退出程序-----\t\n");
printf("\t\t欢迎下次使用!\t\n");
exit(-1);
default: printf("警告!输入错误!\n\t请重新输入!\n");
break;
}
}
stu *create_head() //创建头节点
{
stu *p;
p=(stu *)malloc(LEN);
if(p==NULL)
{
printf("连表创建失败\n");
exit(-1);
}
p->next=NULL;
return (p);
}
void input_head(int n,stu *head) //录入信息
{
stu*p;
p=(stu*)malloc(LEN);
if(p==NULL)
{
printf("新节点创建失败\n");
exit(-1);
}
printf("请输入货物:编号,名称,价格,数量:");
scanf("%s%s %f%d",p->sno,p->sname,&p->scost,&p->snum);
p->next=NULL;
while(head->next!=NULL)
head=head->next;
head->next=p;
}
void serch_message(stu *head) //查询函数
{
int a;
while(1)
{
printf("---------------1,按编号查询------------------------------\n");
printf("---------------2,按名称查询------------------------------\n");
printf("---------------0,返回主菜单------------------------------\n");
printf("请输入你的选择:\n");
scanf("%d",&a);
switch(a)
{
case1: serch_num(head);
break;
case2: serch_name(head);
break;
case0: meau(head);
break;
default: printf("警告!输入错误!\n请重新输入!\n");
break;
}
}
}
void serch_num(stu *head) //按编号查询
{
charstrno[20];
stu *p;
p=head;
printf("请输入你要查询的货物的编号:");
scanf("%s",strno);
while(p->next!=NULL)
{
p=p->next;
if(strcmp(p->sno,strno)==0)
{
printf(" 查询结果 \n");
printf("货物信息:编号%s,名称%s,价格%.2f,数量%d;\n",p->sno,p->sname,p->scost,p->snum);
}
}
}
void serch_name(stu *head) //按名称查询
{
char a[20];
int m=0;
stu *p;
p=head;
printf("---------------请输入要查找货物的名称------------------------------\n");
scanf("%s",a);
while(p->next!=NULL)
{
p=p->next;
if(strcmp(p->sname,a)==0)
{
m=1;
printf(" 查询结果 \n");
printf("货物信息:编号%s,名称%s,价格%.2f,数量%d;\n",p->sno,p->sname,p->scost,p->snum);
}
}
if(m=0)
printf("没有此货物!!!\n");
}
void revise(stu *head) //修改信息
{
char a[20];
int m=-1;
stu *p;
printf("---------------请输入要修改货物的名称------------------------------\n");
scanf("%s",a);
p=head;
while(p->next!=NULL)
{
p=p->next;
if(strcmp(p->sname,a)==0)
{
m=1;
printf("--------------- 请输入新同学的成绩------------------------------\n");
printf("请输入要添加货物的编号,名称,价格,数量:");
scanf("%s %s%f%d",p->sno,p->sname,&p->scost,&p->snum);
}
}
if(m<0)
printf("没有此货物!!!\n");
}
void delete_head(stu *head) //删除信息
{
char sno[20];
int a;
stu *p,*h;
p=head;
printf("请输入你要删除的货物的编号:");
scanf("%s",sno);
while(p->next!=NULL)
{
if(strcmp(sno,p->next->sno)==0)
{
h=p->next;
p->next=p->next->next;
free(h);
printf("---------已删除----------\n");
}
}
p=p->next;
}
void print(stu *head) //输出链表
{
intn=0;
stu*p;
p=head->next;
if(p==NULL)
{
printf("链表为空!\n");
return;
}
while(p!=NULL)
{
n++;
printf("货物信息:编号%s,名称%s,价格%.2f,数量%d;\n",p->sno,p->sname,p->scost,p->snum);
p=p->next;
}
printf("-----------------链表的节数为%d-------------------\n",n);
}
void write_file(stu *head) //保存文件
{
stu *p;
FILE*fp;
p=head;
if((fp=fopen("yanbin.txt","wb"))==NULL)
{
printf("Do not have this file\n");
exit(-1);
}
while(p->next!= NULL)
{
p=p->next;
fwrite(p,LEN,1,fp);
}
fclose(fp);
}
stu *read__file() //读取文件
{
stu*p,*q,*head,*h;
FILE*fp;
h=head=(stu*)malloc(LEN);
p=(stu*)malloc(LEN);
if((fp=fopen("yanbin.txt","rb"))==NULL)
{
printf("cannot open this file!\n");
}
if(fread(head,LEN,1,fp))
{
q=head;
while(fread(p,LEN,1,fp))
{
q->next=p;
q=p;
p=(stu*)malloc(LEN);
}
}
q->next=NULL;
fclose(fp);
return(head);
}
void free1(stu *head) //释放空间
{
stu *q;
q=(stu*)malloc(LEN);
q=head;
while(head->next!=NULL)
{
head=head->next;
free(q);
q=head;
}
free(q);
}