谁会C语言编程啊??150—200行 急用啊 !!!最好是自己写的!! 20

 我来答
xinfeiyu13
2007-01-08 · TA获得超过138个赞
知道答主
回答量:164
采纳率:0%
帮助的人:0
展开全部
//自己写的,虽然不好,诚心可贵,哈哈

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 20

int j,p;
int count=0;//全局变量

void view();//浏览函数
void add();//添加函数
void change();//更改函数
void find();//查找函数
void del();//删除函数
void save();//保存函数
void read();//读取函数
void goon();//继续操作函数
void tc();//退出
struct ck
{
int bh; //定义仓库编号
char name[20]; //定义仓库名称
int kc; //定义仓库库存量
int price; //定义货品单价
}ckmas[N];
void main()
{
char opt;
printf("要读取以前的记录吗?(y/n)\n");
scanf(" %c",&opt);
if(opt == 'y' || opt == 'Y')
read();
int p; //定义操作
printf("\tΨ*******************************************************Ψ\n");
printf("\tΨΨ1.浏览货品信息 2.添加货品 3.更改货品信息ΨΨ*\n");
printf("\tΨΨ4.查找货品信息 5.删除货品信息 6.退出 ΨΨ*\n");
printf("\tΨ*******************************************************Ψ\n");
printf("\t\t\t!!!欢迎进入仓库管理系统!!!\n\n");
printf("\n");

printf("请输入您想选择的操作1-6:");
scanf("%d",&p); //输入选择的操作
switch(p) //条件语句
{
case 1:view();break;
case 2:add();break;
case 3:change();break;
case 4:find();break;
case 5:del();break;
case 6:tc();
}
};
/*-----------------------------浏览货品信息------------------------*/
void view()
{
int i;
printf("编号\t名称\t库存\t单价\n");
for(i=0;i<count;i++)
printf("%d\t%s\t%d\t%d\n",ckmas[i].bh,ckmas[i].name,ckmas[i].kc,ckmas[i].price);
goon();//提醒用户是否继续操作
}
/*-----------------------------添加货品信息------------------------*/
void add()
{
int i,addnum;
printf("\t\t你想增加多少条记录?\n");//问用户添加几条记录
scanf("%d",&addnum);
printf("编号 名称 库存 单价\n");
for(i=count;i<count+addnum;i++)
scanf("%d %s %d %d",&ckmas[i].bh,ckmas[i].name,&ckmas[i].kc,&ckmas[i].price);//录入添加的货品信息
printf("\t\t你添加了%d条记录,总共有%d条记录\n",addnum,count+addnum);
count=count+addnum;//储存记录条数
save();//储存数据
goon();//提醒用户是否继续操作
}
/*----------------------------更改货品信息------------------------*/
void change ()
{
int num,i,count1;
printf("\t\t请您输入您要更改货品信息的编号:\n");
scanf("\t\t%d",&num);
for(i=0;i<count;i++)//查找出更改货品的信息
if(num==ckmas[i].bh)
{ printf("\t\t您要更改的货品信息如下:\n");
printf("编号 名称 库存 单价\n");
printf("%d\t%s\t%d\t%d\n",ckmas[i].bh,ckmas[i].name,ckmas[i].kc,ckmas[i].price);
i++;
break;
}

count1=(i++)-1;//记录要更改的是第几个记录
printf("\n");
printf("\t\t请重新输入信息:\n");
printf("编号 名称 库存 单价\n");
scanf("%d%s%d%d",&ckmas[i].bh,ckmas[i].name,&ckmas[i].kc,&ckmas[i].price);//录入添加的货品信息
save();//储存数据
goon();//提醒用户是否继续操作
}

/*----------------------------查找货品信息------------------------*/

void find()
{
int i,a,num;
char b[20];
printf("1.按编号查找\t\t2.按名称查找\n");
scanf("%d",&a);
if(a==1)
{
printf("\t\t请您输入您要查找的货品编号:\n");
scanf("\t\t%d",&num);

for(i=0;i<count;i++)//查找出更改货品的信息
if(num==ckmas[i].bh)
{ printf("\t\t您要更改的货品信息如下:\n");
printf("编号 名称 库存 单价\n");
printf("%d\t%s\t%d\t%d\n",ckmas[i].bh,ckmas[i].name,ckmas[i].kc,ckmas[i].price);
i++;
break;
}
}
else
{
printf("请输入您想查找的货品名称:");
scanf("%s",b);
for(i=0;i<count;i++)
if(strcmp(b,ckmas[i].name)==0)
{
printf("编号 名称 库存 单价\n");
printf("%d\t%s\t%d\t%d\n",ckmas[i].bh,ckmas[i].name,ckmas[i].kc,ckmas[i].price);
break;
}

else if(strcmp(b,ckmas[i].name)!=0)
printf("对不起,查无此记录!!!");
}

save();//储存数据
goon();//提醒用户是否继续操作

}
/*--------------------------------删除货品信息结构体-----------------------*/
void del()
{
int i,j,delnum;
int count2=count;//将原先的记录数保存下来,以便后面做比较以判断是否做了删除
char ch1,ch2;
do{
printf("\t\t请输入你想删除的货品编号:\n");
scanf("\t\t%d",&delnum);

for(i=0;i<count;i++)//查找
if(ckmas[i].bh==delnum)
{
for(j=i;j<count;j++)
ckmas[j]=ckmas[j+1];//将后面的元素覆盖前面的元素,并且
count--; // 数组长度减一
break;
}

if(count==count2)//当没有删除时,现在的记录数与原先的记录数相等,count是自减后的记录数,count2是原来的记录数
{
printf("\t\t对不起!您的操作不成功!\n");
}

printf("\t\t还要继续删除吗?(Y/N)\n");
scanf(" \t\t%c",&ch1);

}while(ch1=='Y'||ch1=='y');

if(count!=count2)//自减后的记录数与原来的记录数不等,说明删除成功,保存数据
{ printf("\t\t是否要保存所做的删除操作?(Y/N)\n");
scanf(" \t\t%c",&ch2);
if(ch2=='y'||ch2=='Y')
save();
}
goon();//提醒用户是否继续操作
}

/*------------------------------------保存信息操作-------------------------------------*/
void save()
{

FILE *fp;//定义一个文件指针
fp=fopen("ck.txt","w");//以覆盖写的方式打开"ck.txt"文件,并把指针指向它
if(fp==NULL)//如果指针返回一个空值
printf("文件保存失败!\n");//打印一条错误提示
else//否则
{
for(int i=0;i<count;i++)//循环
fwrite(&ckmas[i],sizeof(ck),1,fp);//向"ck.txt"写入信息,每次一条
printf("文件保存成功!\n");//给出执行成功提示信息
}
fclose(fp);//关闭文件
}
/*----------------------------------读取文件操作-------------------------------------*/
void read()
{
FILE *fp;//定义一个文件指针
fp=fopen("ck.txt","r");//以只读的方式打开"ck.txt"文件,并把指针指向它
if(fp==NULL)//如果指针返回一个空值
printf("文件读取失败!\n");//打印一条错误提示
else//否则
{
count=0;//将信息条数设置为0,下面的读取工作将会覆盖原先记录
for(int i=0;;i++,count++)//循环
if(fread(&ckmas[count],sizeof(ck),1,fp)==NULL)//从"ck.txt"中读取信息,每次一条,如果fread()函数返回空值
break;//则退出循环
printf("文件读取成功!\n");//给出执行成功提示信息
}
fclose(fp);//关闭文件
}
/*----------------------------------控制主循环操作-----------------------------------*/
void goon()//判断是否继续操作函数
{
char a;
printf("是否继续操作(Y or N):");
scanf(" %c",&a);
if(a=='Y'||a=='y')
main();
else if(a=='N'||a=='n')
tc();
}
void tc()
{
printf("\t\t\t@@@@@@@@@@@@@@@@@@@@@@@@\n");
printf("\t\t\t!!!!谢谢您使用本系统!!!!\n");
printf("\t\t\t!!!!欢迎下次继续使用!!!!\n");
printf("\t\t\t@@@@@@@@@@@@@@@@@@@@@@@@\n\n");
exit(0);
}
我爱苏娟
2007-01-08 · 超过50用户采纳过TA的回答
知道答主
回答量:1147
采纳率:0%
帮助的人:0
展开全部
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 100
#define OK 1
#define ERROR 0
//定义树的结点
typedef struct{
char character;
unsigned int weight;
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;
//定义存放每个字符的而二进制前缀编码
typedef struct{
char character;
unsigned int space;
char *str;
}HCNode,*HuffmanCode;
//清理缓冲区
void clear_kb(void)
{
char junk[80];
gets(junk);
}

//挑选权值最小的两个无父结点
int Select(HuffmanTree HT,unsigned int k,unsigned int &s1,unsigned int &s2){
unsigned int i;
unsigned int temp=MAX;
for(i=1;i<=k;i++)
if(HT[i].parent==0&&HT[i].weight<=temp)
{
temp=HT[i].weight;
s1=i;
}
temp=MAX;
for(i=1;i<=k;i++)
if(HT[i].parent==0&&HT[i].weight<=temp&&i!=s1)
{
temp=HT[i].weight;
s2=i;
}
return OK;
}
//建立哈夫曼树
int make_hfmtree(HuffmanTree &HT,unsigned int &size)
{
unsigned int i,s1,s2;
unsigned int m;
unsigned int *weight;
char *string;
char ch;
unsigned int size_t,count;
puts("\t\t开始建立哈夫曼树,请按提示输入树的有关信息!");
printf("\t\t输入字符集大小:");
scanf("%d",&size_t);
clear_kb();
size=size_t;
m=2*size_t-1;
if(size_t<=1)
{
puts("你输入的字符集大小无意义!");
exit(EXIT_FAILURE);
}

weight=(unsigned int*)malloc(size_t*sizeof(unsigned int));
string=(char *)malloc((size_t+1)*sizeof(char));
count=0;
while(count<size_t)
{
printf("\t\t输入第%d个字符:",count+1);
scanf("%c",&string[count]);
printf("\t\t输入其权值:");
clear_kb(); //int fflush(FILE *)
scanf("%d",&weight[count]);
clear_kb();
count++;
}

string[size_t]='\0';

HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));
if(HT==NULL)
{
puts("内存分配出错");
exit(EXIT_FAILURE);
}

for(i=1;i<=size_t;++i,++weight,++string)
{
HT[i].character=*string;
HT[i].weight=*weight;
HT[i].lchild=0;
HT[i].parent=0;
HT[i].rchild=0;
}

for(;i<=m;i++)
{
HT[i].character=*string;
HT[i].weight=0;
HT[i].lchild=0;
HT[i].parent=0;
HT[i].rchild=0;
}

for(i=size_t+1;i<=m;++i)
{
Select(HT,i-1,s1,s2);
HT[s1].parent=i;
HT[s2].parent=i;
HT[i].lchild=s1;
HT[i].rchild=s2;
HT[i].weight=HT[s1].weight+HT[s2].weight;
}
printf("\t\t已经成功建立哈夫曼树!");
getchar();
return OK;
}

//把哈夫曼树存于hfmtree文件中
int keep_in_HT(HuffmanTree HT,unsigned int size)
{
FILE *fp;
char ch;
puts("\t\t现在把建立好的哈夫曼树存于hfmtree文件中!");
if((fp=fopen("hfmtree.dat","w+b"))==NULL)
{
puts("\t\t以写方式打开hfmtree文件错误!");
exit(EXIT_FAILURE);
}
else
{
puts("\t\t成功打开文件,准备写入。。。");
if(fwrite(HT,sizeof(HTNode),2*size,fp)!=2*size)
{
puts("\t\t写hfmtree文件发生错误!");
exit(EXIT_FAILURE);
}

fclose(fp);
printf("\t\t成功把哈夫曼树存进hfmtree文件中!");
}
getchar();
return OK;
}

//从hfmtree文件中读取哈夫曼树
int get_hfmtree(HuffmanTree &HT,unsigned int &size)
{
FILE *fp;
char ch;
long set,end,distance;
unsigned int m;
puts("\t\t现在从hfmtree文件中读取哈夫曼树!");
if((fp=fopen("hfmtree.dat","rb"))==NULL)
{
puts("\t\t以读方式打开hfmtree文件错误!");
exit(EXIT_FAILURE);
}
else
{ puts("\t\t成功打开文件,准备读取。。。");
set=ftell(fp);
fseek(fp,0,SEEK_END);
end=ftell(fp);
rewind(fp);
distance=end-set;
m=distance/sizeof(HTNode);
size=m/2;
HT=(HuffmanTree)malloc(m*sizeof(HTNode));
if(HT==NULL)
{
puts("内存分配出错!");
exit(EXIT_FAILURE);
}
if(fread(HT,sizeof(HTNode),m,fp)!=m)
{
puts("\t\t读hfmtree文件发生错误!");
exit(EXIT_FAILURE);
}
fclose(fp);
puts("\t\t成功读取hfmtree文件!");

}

return OK;
}

//对每个字符编码(它的哈夫曼编码)
int HuffmanCoding(HuffmanCode &HC,unsigned int &size)
{

unsigned int i,start,c,flag;
char *cd;
HuffmanTree HT;
get_hfmtree(HT,size);
cd=(char *)malloc(size*sizeof(char));
if(cd==NULL)
{
puts("内存分配出错!");
exit(EXIT_FAILURE);
}
HC=(HuffmanCode)malloc((size+1)*sizeof(HCNode));
if(HC==NULL)
{
puts("内存分配出错!");
exit(EXIT_FAILURE);
}
cd[size-1]='\0';
for(i=1;i<=size;++i)
{
HC[i].character=HT[i].character;
start=size-1;
for(c=i,flag=HT[i].parent;flag!=0;c=flag,flag=HT[flag].parent)
{
if(HT[flag].lchild==c) cd[--start]='0';
else cd[--start]='1';
}

HC[i].space=size-start;//size_t strlen(char *str)
HC[i].str=(char *)malloc((size-start)*sizeof(char));
if(HC[i].str==NULL)
{
puts("内存分配出错!");
exit(EXIT_FAILURE);
}
strcpy(HC[i].str,&cd[start]);
}
free(cd);
return OK;
}
//显示每个字符的哈夫曼编码
int put_in_display(void)
{
unsigned int i;
HuffmanCode HC;
unsigned int size;
HuffmanCoding(HC,size);
printf("\t\t每个字符的哈夫曼编码如下:\n");
for(i=1;i<=size;i++)
printf("\t\t这个字符[%c]的哈夫曼编码是:%s\n", HC[i].character,HC[i].str);
printf("\t\t");
getchar();
return OK;
}

//写ToBeTran文件,也就是给它内容
int write_ToBeTran(void)
{
FILE *fp;
int count=1;
char ch;
char buf[81];
if((fp=fopen("ToBeTran.dat","w+b"))==NULL)
{
puts("\t\t以写方式打开ToBeTran文件错误!");
exit(EXIT_FAILURE);
}
puts("\t\t请你开始输入ToBeTran的正文内容!");

while(1)
{

printf("\t\t第%d行正文是:",count);
gets(buf);
count++;
if(fwrite(buf,sizeof(char),strlen(buf),fp)!=strlen(buf))
{
puts("\t\t写ToBeTran文件发生错误!");
exit(EXIT_FAILURE);
}
printf("\t\t是否继续输入正文的第%d行,按y/Y键确定,按其它键退出:",count);
ch=getchar();
if(ch=='y'||ch=='Y')
{
clear_kb();
continue;
}
else break;
clear_kb();

}

getchar();
fclose(fp);
return OK;
}

//读ToBeTran文件,并把编码存于CodeFile文件中
int read_ToBeTran(void)
{
FILE *fp,*fp1;
char *ch;
HuffmanCode HC;
unsigned int size;
HuffmanCoding(HC,size);
ch=(char*)malloc(1*sizeof(char));
long set,end,distance;
unsigned int count,i,j;
i=0;
if((fp=fopen("ToBeTran.dat","rb"))==NULL)
{
puts("\t\t以读方式打开ToBeTran文件错误!");
exit(EXIT_FAILURE);
}
if((fp1=fopen("CodeFile.dat","w+b"))==NULL)
{
puts("\t\t以写方式打开CodeFile文件错误!");
exit(EXIT_FAILURE);
}
puts("\t\t打开ToBeTran和CodeFile文件成功!");
puts("\t\t开始编码。。。");
set=ftell(fp);
fseek(fp,0,SEEK_END);
end=ftell(fp);
rewind(fp);
distance=end-set;
count=distance/sizeof(char);
while(i<count)
{
if(fread(ch,sizeof(char),1,fp)!=1)
{
puts("\t\t读ToBeTran文件发生错误!");
exit(EXIT_FAILURE);
}
for(j=1;j<=size;j++)
if(HC[j].character==*ch)
{
if(fwrite(HC[j].str,sizeof(char),HC[j].space-1,fp1)!=HC[j].space-1)
{
puts("\t\t写CodeFile文件发生错误!");
exit(EXIT_FAILURE);
}
break;
}
i++;
}
printf("\t\t成功编码!");
getchar();
fclose(fp);
fclose(fp1);
return OK;
}

//读CodeFile文件,把正文存于TextFile文件
int coding_CodeFile(void)
{
FILE *fp,*fp1;
char *ch;
HuffmanTree HT;
unsigned int size;
get_hfmtree(HT,size);
ch=(char*)malloc(1*sizeof(char));
long set,end,distance;
unsigned int count,i,j,flag;
if((fp1=fopen("CodeFile.dat","rb"))==NULL)
{
puts("\t\t以读方式打开CodeFile文件错误!");
exit(EXIT_FAILURE);
}
printf("\t\t成功打开CodeFile文件!");
if((fp=fopen("TextFile.txt","w+b"))==NULL)
{
puts("\t\t以写方式打开TextFile文件错误!");
exit(EXIT_FAILURE);
}
printf("\n\t\t成功打开TextFile文件!");
set=ftell(fp1);
fseek(fp1,0,SEEK_END);
end=ftell(fp1);
rewind(fp1);
distance=end-set;
count=distance/sizeof(char);
i=0;
flag=2*size-1;
printf("\n\t\t正在进行译码。。。");
while(i<count)
{
if(fread(ch,sizeof(char),1,fp1)!=1)
{
puts("\t\t读ToBeTran文件发生错误!");
exit(EXIT_FAILURE);
}
if(*ch=='0')
{
flag=HT[flag].lchild;
if(HT[flag].character!='\0')
{
if(fwrite(&HT[flag].character,sizeof(char),1,fp)!=1)
{
puts("\n\t\t写TextFile文件发生错误!");
exit(EXIT_FAILURE);
}
flag=2*size-1;
}
}
else if(*ch=='1')
{
flag=HT[flag].rchild;
if(HT[flag].character!='\0')
{
if(fwrite(&HT[flag].character,sizeof(char),1,fp)!=1)
{
puts("\n\t\t写TextFile文件发生错误!");
exit(EXIT_FAILURE);
}
flag=2*size-1;
}
}
i++;
}
printf("\n\t\t成功译码,并把译文存于TextFile文件中");
getchar();
fclose(fp);
fclose(fp1);

return OK;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式