标题:实训啦,问题多多~大家多多关照!
只看楼主
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
得分:0 

饿。是的。定义了多次了喃。

我把它分块后就必须要传入。怕麻烦了。就直接再定义1个。这样不太对哦。

我整合不了成1个文件。不回返回。。。。


人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-06-28 15:22
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-28 15:30
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
得分:0 
恩。全没有。这次开始得比较乱。。。

放心。应该快了~准备今天K掉这个工程。星星快出现。

然后明天再开一个。

PS我不喜欢画流程图的!

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-06-28 15:32
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
得分:0 

单个文件整合成功。还有点小细节。求助呀~
[CODE]#include <stdio.h>
#define MAX 3
struct day
{
int month;
int day1;
};
struct mydata
{
char name[20];
struct day birthday;
char telnum[20];
}a[MAX];
static int g=0; //错误修改。不能=0,修改会覆盖数据的BUG。
void creat1();
void load(struct mydata a[]);
void save(struct mydata a[]);
int main2(void);
void input(struct mydata a[]);
void output(struct mydata a[]);
void search(struct mydata a[]);
void array(struct mydata a[]);
void delete1(struct mydata a[]);
void modify(struct mydata a[]);
int main(void) //第1层选择处
{
while(1)
{
int i;
printf("0.creat a new file.\n");
printf("1.load the file.\n");
printf("please select:");
scanf("%d",&i);
getchar();
switch (i)
{
case 0:creat1();break;
case 1:load(a);printf("\n\n");main2();break;
}
}
return 0;
}

int main2(void) //第2层选择处
{
while(1)
{int i;
printf("0.save the data.\n");
printf("1.input the data.\n");
printf("2.output the data.\n");
printf("3.search the data.\n");
printf("4.array the data.\n");
printf("5.modify the data.\n");
printf("Please selete:");
scanf("%d",&i);
getchar();
switch (i)
{
case 0:save(a);exit(0);
case 1:input(a);break;
case 2:output(a);break;
case 3:search(a);break;
case 4:array(a);break;
case 5:modify(a);break;
}
}
}

void input(struct mydata a[]) //输入data
{
char ch;

printf("input the data:");
do
{
printf("\ninput the name:");
gets(a[g].name);
printf("\ninput the birthday(mm-dd):");
scanf("%d-%d",&a[g].birthday.month,&a[g].birthday.day1);
getchar();
printf("\ninput the telphone number:");
gets(a[g].telnum);
printf("countuie?(press n or N to quie)");
scanf(" %c",&ch);
getchar();
}while((ch!=78)&&(ch!=110)&&(++g<MAX)); //g出问题的地方。

}

void array(struct mydata a[]) //排列
{
int i,j;
struct mydata t;
for(i=0;i<=g;i++) //让人名从a-z排列
{
for(j=1;j<=g;j++)
{
if(strcmp(a[i].name,a[j].name)>0)
{t=a[i];a[i]=a[j];a[j]=t;}
}
}
}

void output(struct mydata a[]) //输出
{
int i;
for(i=0;i<=g;i++) //输出所有人物!
{
printf("%s's birthday is %d.%d telphone number is %s.\n",
a[i].name,a[i].birthday.month,a[i].birthday.day1,a[i].telnum);
}
}

void search(struct mydata a[]) //查找
{
char keyname[20];int i,flag=1;
struct mydata t;
printf("input the search name:"); //查找人物!
gets(keyname);

for(i=0;(i<=g)&&flag;i++)
{
if(strcmp(keyname,a[i].name)!=0);
else
{
printf("Find the data:%s's birthday is %d.%d telphone number is %s.\n",
a[i].name,a[i].birthday.month,a[i].birthday.day1,a[i].telnum);
flag=0;
}
}
if(flag)printf("Can't find the data!!\n");
}


void delete1(struct mydata a[]) //删除
{
char keyname[20];int i,flag=1;
printf("input the search name:");
gets(keyname);

for(i=0;(i<=g)&&flag;i++)
{
if(strcmp(keyname,a[i].name)!=0);
else
{
a[MAX]=a[i];g-=1;
printf("Find the data:%s's birthday is %d.%d telphone number is %s.\n",
a[i].name,a[i].birthday.month,a[i].birthday.day1,a[i].telnum);
flag=0;
}
}
if(flag)printf("Can't find the data!!\n");
}

void creat1()
{
FILE *fp1;
fp1=fopen("tongxun.bin","w+");

if((fp1!=NULL))
printf("File creat success!!!\n");
else
printf("File creat failure!!!\n");
}

void load(struct mydata a[])
{
FILE *fp1;
int i;
if((fp1=fopen("tongxun.bin","rb"))==NULL)
{
printf("The file can not open!!!\n");
return;
}

for (i=0;i<=g;i++)
if(fread(&a[i],sizeof(struct mydata),1,fp1)!=1)
{printf("file load error!\n");
return;
}
fclose(fp1);
}

void save(struct mydata a[])
{
int i;
FILE *fp1;
array(a);

if((fp1=fopen("tongxun.bin","wb"))==NULL)
{
printf("The file can not open!!!\n");
return;
}

for(i=0;i<=g;i++)
if(fwrite(&a[i],sizeof(struct mydata),1,fp1)!=1)
{printf("file save error!\n");
return;
}
fclose(fp1);
}

void modify(struct mydata a[])
{
char keyname[20];int i,flag=1;
struct mydata t;
printf("input the search name:"); //查找人物!
gets(keyname);

for(i=0;(i<=g)&&flag;i++)
{
if(strcmp(keyname,a[i].name)!=0);
else
{
printf("Find the data:%s's birthday is %d.%d telphone number is %s.\n",
a[i].name,a[i].birthday.month,a[i].birthday.day1,a[i].telnum);
printf("Please input the modify data:\n");
printf("input the new name:");
gets(a[i].name);
printf("\ninput the new birthday(mm-dd):");
scanf("%d-%d",&a[i].birthday.month,&a[i].birthday.day1);
getchar();
printf("\ninput the new telphone number:");
gets(a[i].telnum);
flag=0;
}
}
if(flag)printf("Can't find the data!!\n");
}
[/CODE]

首先是几个选择之间的跳动。在第1层选择1,读取文件后就进入第2层。觉得不够灵活。不过现在我也想不出要怎么跳动。
有了,最好调用第2层save过后,跳回第1层。

第2,就是g的输入问题,当输入用户少于3个的时候,g的值正常,当大于时g=g+1了。把g调大可以处理问题。

第3,还缺少个功能,正在进行加入咧 //耶耶,修改功能实现。。。呼。。。高兴咧~

星星来看下咯~3Q

晕。出现新问题。还是和g有关。首先第1次输入的数据没有问题。当第2次输入时,g又回到0直接把第1个数据覆盖。

静态变量。。。不明白咧~~~星星怎么改呀哈?

倒了,这个问题被KO了。就是开始我把g=0了。可是在main函数外也能被运行到?

[此贴子已经被作者于2006-6-28 16:27:01编辑过]


人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-06-28 15:57
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 

总的来说,已经有模有样啦,恭喜。

1。要适当清屏,否则不好看。
2。g的问题不在红字处。而是在一切:
for(i=0;i<=g;i++)
从0,1,2数到g总共是(g+1)个数字!
改成 i<g 也许就可以了。
3。creat1()功能太单薄。


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-28 16:26
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
得分:0 
以下是引用–★–在2006-6-28 16:26:46的发言:

总的来说,已经有模有样啦,恭喜。

1。要适当清屏,否则不好看。
2。g的问题不在红字处。而是在一切:
for(i=0;i<=g;i++)
从0,1,2数到g总共是(g+1)个数字!
改成 i<g 也许就可以了。
3。creat1()功能太单薄。

1,清屏有必要。。。还缺少些人性化的设计。太简陋了。

2,涉及到g的我还要回去多加实验。运行过会会发现各种各样的毛病。

3,还有什么功能可以加咧?是不是有文件已经存在?是否覆盖的选择。

看来要彻底完成还需要时间呀。本来想晚上整理下。明天再开个工呢!


人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-06-28 16:29
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
得分:0 
晕。出现新问题。还是和g有关。首先第1次输入的数据没有问题。当第2次输入时,g又回到0直接把第1个数据覆盖。

--------------------------------------------------------------------------

静态变量,虽然有“记性”。
运行第二遍时,肯定已经清过零了。

还是理出头绪来再编吧。
MAX:表示存储人物数的上限。
g:应该等于*.bin实际存储的人数。
打开旧文件时,怎样让g获得正确的值呢?
方法1:在文件某处写上该值
方法2:逐一fread()时统计一下即可。
另外g不宜充当循环变量!

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-28 16:35
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
得分:0 
哦。。。。原来是这样的呢。么有发现这个原因喃。

在读入的时候直接记录个数就OK了!

呼。开工不想了。整好这个吧。。。西西~

[此贴子已经被作者于2006-6-28 16:41:32编辑过]


人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-06-28 16:38
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
得分:0 

选择层的调度有办法么?实在不行合并起来了。。。


人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-06-28 16:42
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
得分:0 
实训第3天总结:

要把这个东西些好不容易咧~今天有了进展。

可是比想象中的要慢了很多。昨天晚上想多写的。可是最后被瞌睡虫打败了。

不能复杂恐怖的东西吓倒。写不下去的时候该看看书。找下自己需要的东西。会有很大帮助哈。

明天希望能彻底摆平它。没几天后还要考试咧~~~

+U+U+U

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-06-28 16:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-74859-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.064679 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved