2015年6月29日 课设日志

一大早,带着不一样的心情进入机房,今天把电脑也带着,毕竟还是有用的。嗯,那今天的任务呢,大体分俩个,继续完成一个任务,和对已经完成的任务进行验证。老师现在还在查人。

然而,现在组长才布置任务,而且,应该是前几天的任务,是以层次模块,每个人开始写。

软件的分析设计,舒老师现在在讲的内容,课设的目的就是想提高大家的编程目的,早早积累项目经验。

和以往的不同,不要小看,按工程设计要求。老师说,我们这届在学校做项目是很难得的。

现在开始讲课设的流程。

老师说,现在自己做的东西,自己保留,自己分享。//老师有时说的听不懂啊,现在在说销售统计模块。

设计思路讲完了,现在开始讲三个层次了。

其实现在讲的,就是我这几天自己学到的,自己经历之后,再听到底是怎么回事,感觉不错。自己吃饭,和别人给你喂饭,感觉真的不一样耶。进步。

老师讲了半天的链表,感觉好厉害︿( ̄︶ ̄)( ̄︶ ̄)︿

最后讲分页了,要听的很认真的样子,突然觉得我还是很聪明的。

现在是1046,老师在10多分钟前已经讲完了,那些老师准备好的文件需要都集中到一起,认真分析。

然后,此刻的工作任务,是:

现在是1130,过去的这些时间,在组长的具体安排下,大家的任务终于分好了,组长负责界面层,副组长负责持久化层,我和其他四个人负责业务逻辑,我刚才小小充当了下领导的感觉,还不错。

然后,我的任务终于清楚了:

用户业务逻辑层

订单信息逻辑层

然后,因为现在,老师终于又领悟了,然后给大家发了各个模块,大家只需要往进写东西就好了,所以,go go go 一切都正式开始了。

现在是1204,激动之后是淡定,是有模块了,但是没有流程,老师才发了座位的整体设计。我再看看,自己想。

 

还是学习学习再学习吧:

Get1:判断一个链表是否为空

由头结点的指针部分是否为空来判断,如果为空,则链表为空

 

 

下班,睡了个午觉,才起来,准备了一下,开始工作。然后呢,因为我要写的还没有计划说,就手头现在有的,我决定准备写一下:

演出计划的持久层

 

现在是,1525,马上开工。

 

现在是1635,实习报告出了点问题,修改了20多分钟,然后,以下是刚才的:

     int Schedule_Perst_SelectByPlay(schedule_list_t list, int play_id){

        int l=0;

        FILE *fp;

        schedule_list_t temp;

 

        fp=fopen("SCHEDULE_DATA_FILE","rb");

        if (fp==NULL)

        {

                printf("Open fail!\n");

                return 0;

        }

 

        while ( !feof(fp) )

        {

                fread(temp,sizeof(schedule_list_t),1,fp)

                if (   temp->data.play_id == play_id    )

                {

                        List_init(list,schedule_list_t);

                        List_AddTail(list,temp);

                        l++;

                }

        }

       

        fclose(fp);

        return l;

}

这是根据剧目ID从文件中载入所有演出计划,while里的东西搞了大半天,一开始不知道如何将读出的数据放入链表。。。。。。然后然后,幸好早上也听老师了些话,找了半天辅助资料,链表的函数就是直接用的,init初始化下,然后调用AddTail直接使用就好,把temp数据放入链表list

 

嗯,这个就这样了,然后,演出计划还有5个持久化层,继续下一个。

 

现在是1709,结果刚才到现在,都在帮舍友解决问题,关于链表的,

 

现在是1949,以下是关于添加演出计划的:

int Schedule_Perst_Insert(const schedule_t *data)

{

        FILE *fp;

        int rtn=0;

 

        fp=fopen("SCHEDULE_DATA_FILE","ab");

        if (fp==NULL)

        {

                printf("Open fail!\n");

                return 0;

        }

 

        rtn=fwrite(data,sizeof(schedule_t),1,fp);

 

        fclose(fp);

 

        return rtn;

}

有流程,自己动手编写还是方便多了,不知道这真的是以后工作的简单写照吗?说说代码:以ab方式打开SCHEDULE_DATA_FILE,失败提示现在是必不可少的。然后,用fwrite写入一条演出计划信息,返回值就是1,关闭文件。以上都是按流程图来的,真的是老师今天早上说的,只是锻炼我们的编程能力而已。

现在是2258,反正一直都忙忙碌碌的到现在,开始,最后在来一个小时多,就收工了。

 

这个现在是演出计划更新函数:

int Schedule_Perst_Update(const schedule_t *data){

        FILE *fp;

        schedule_t buf;

        int found=0;

        fp=fopen("SCHEDULE_DATA_FILE","rb+");

        if (fp==NULL)

        {

                printf("Open fail!\n");

                return 0;

        }

 

        while ( !feof(fp) && fread(buf,sizeof(schedule_t),1,fp) && buf.id==data.id )

        {

                fseek(fp,-sizeof(schedule_t)L,SEEK_CUR);

                printf("The infomation : \n");

                scanf("%d%d%d%d%d%d",&data.id,&data.play_id,&data.studio_id,&data.data_tdata,&data.mytime_ttime,&data.seat_count);

                fprintf(fp,"%d%d%d%d%d%d",data.id,data.play_id,data.studio_id,data.data_tdata,data.mytime_ttime,data.seat_count);

                found=1;

        }

 

        fclose(fp);

 

        return found;

}

其实吧,这个没有太搞明白。。。不过,回头看了看计划的业务逻辑层,貌似明白了怎么回事,也就是开始也想的,就是不管你是增添修改删除,各个完成之后之后,就调用这个函数进行更新一次,保证文件的及时性。但,又有,它流程里,说,向文件中写入要修改的剧目记录。明明是更新,为什么要修改?修改什么?好吧,这是今天,也是最近遇到的第一个问题。

 

继续。

 

这个现在是演出计划的删除:

int Schedule_Perst_DeleteByID(int ID){

        FILE *fp;

        FILE *tp;

            Int found;

        schedule_t buf;

        if (    rename(SCHEDULE_DATA_FILE,SCHEDULE_DATA_TEMP_FILE)!=0   )

        {

                printf("Change name fail!\n");

                return 0;

        }

 

        tp=fopen("SCHEDULE_DATA_TEMP_FILE","rb");

        fp=fopen("SCHEDULE_DATA_FILE","wb");

 

        if (fp==NULL && tp==NULL )

        {

                printf("FILE fail!\n");

                return 0;

        }

 

        while ( !feof(tp) )

        {

                if (    fread(buf,sizeof(schedule),1,tp) && buf.id==ID  )

                        found=1;

                fwrite(buf,sizeof(schedule),1,fp);

        }

 

        fclose(tp);

        fclose(fp);

        if ( remove(STUDIO_DATA_TEMP_FILE)==1 )

                return found;

}

其实,真的是深深体会到,大部分模块都是相同的,流程都是一样的,刚才还在傻傻的找昨天写的日志,比如找重命名renamefreadfwrit都是一个想法,复制粘贴昨天的代码。说收获,文件中的删除,就是将文件中的数据调出来到临时文件中,然后和需要删除的比较,不一样的,再次放入文件就好。最后删的,怎么删?就是临时文件里剩的是需要删除的,所以最后才有一步删除临时文件remove()。

 

下面这个是今天的倒数第二个了!!

功能就是:按照ID从文件中查询演出计划数据,并将其保存到buf所指的内存单元中。

 

int Schedule_Perst_SelectByID(int ID, schedule_t *buf){

        FILE *fp;

        int found=0;

        schedule_t data;

        fp=fopen("SCHEDULE_DATA_FILE","rb");

        if (fp==NULL)

        {

                printf("Open fail!\n");

                return 0;

        }

 

        while (!feof(fp))

        {

                if (    fread(data,sizeof(schedule_t),1,fp)&&   data.id==ID     )

                {

                        buf=data;

                        found=1;

                }

        }

 

        fclose(fp);

 

        return found;

}

主要还是用了一个fread,结构体数据赋值。感觉现在是明白了好多,最后一个函数了

功能是:从文件中获取所有的演出计划数据组织成头指针为list的链表。

 

int Schedule_Perst_SelectAll(schedule_list_t list){

        FILE *fp;

        int l=0;

        schedule_list_t temp;

        fp=fopen("SCHEDULE_DATA_FILE","rb")

        if (fp==NULL)

        {

                printf("Open fail!\n");

                return 0;

        }

 

        while ( !feof(fp) )

        {

                if (    fread(fp,sizeof(schedule_list_t),1,temp) && temp->data.id==play_id )

                {

                        List_init(list,schedule_list_t);

                        List_AddTail(list,temp);

                        l++;

                }

        }

 

        fclose(fp);

 

        return l;

}

好吧,我承认最后这一个函数是勉强写完了,其实问题有两个:

1俩个结构体的使用有些搞混了,就是把新的数据读到新的链表list里还是有些混啊

O_O我要不要今天就这样呢

 

今天的收获还是不错,更加体会freadfwrite的使用意义,还学到了fseek这选择文件的位置函数,回头再看看

算是一个人写了一个,演出计划持久化层模块。对持久化层的编写流程是更进一步了。

好吧 今天就到这了 明天再看吧 或许睡一觉起来 会发现更多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值