2015年7月2日 课设日志

201572日 软件1404 赵毅 课设日志

今天可以说是课设的最后一天,然后明天就上交结果,结果现在已经很明显了,所以,还是应该做好现在要做的的事。那么,今天的任务就是:

1:改正演出计划界面层的错误

2:既然我已经写过一个完整的模块了,那么,今天就来一把。可是,找到的管理票模块,并没有让写界面层。管理票模块。

 

 

那就先来写管理票模块。

 

第一个就是:将链表上的所有票信息数据写入票数据文件中

int Ticket_Perst_Insert(ticket_list_t list){

        FILE *fp;

        ticket_list_t head==NULL;

        int rtn=0;

 

        fp=fopen("TICKET_DATA_FILE","ab")

        if (fp==NULL)

        {

                printf("Open fail!\n");

                return 0;

        }

 

        printf("Please input the ticket to the file: \n");

 

        while (list->next!=head)

                rtn=fwrite(list,sizeof(ticket_list_t),1,fp);

 

        fclose(fp);

 

        return rtn;

}

真的觉得只要一个模块真正会写了,其它模块就都一样,说明书上就这样来得,可是我还是打开了演出计划的持久化窗口在参考--

 

这是:从文件中删除与主键为schedule_id相关的票数据。

int Ticket_Perst_Delete(int schedule_id){

        FILE *fp;

        FILE *tp;

        ticket_t *temp;

        int found;

 

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

        if (tp==NULL)

        {

                printf("Open fail!\n");

                return 0;

        }

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

        if (fp==NULL)

        {

                printf("Open fail!\n");

                return 0;

        }

 

        while ( !feof(tp)       )

        {

                fread(&temp,sizeof(ticket_t),1,tp);

                if (    temp->id==schedule_id   )

                        found=1;

                fwrite(&temp,sizeof(ticket_t),1,fp)

        }

 

        fclose(fp);

        fclose(tp);

 

        if ( remove(TICKET_DATA_TEMP_FILE)==1   )

                return found;

}

和之前就都一样了,用个临时文件,对其进行筛选,到fp里。

 

此刻是:将data所指的票信息更新入演出计划数据文件中:

 

int Ticket_Perst_Update(const ticket_t * data) {

        FILE *fp;

        ticket_t *temp;

        int found=0;

 

        fp=fopen("TICKET_DATA_FILE","rb+")

        if (fp==NULL)

        {

                printf("Open fail!\n");

                return 0;

        }

 

        while ( !feof(fp)                       )

        {

                fread(&temp,sizeof(ticket_t),1,fp);

                if (    temp->id==dat->id               )

                {

                        fseek(fp,-sizeof(ticket_t),SEEK_CUR);

                        fwrite(&temp,sizeof(ticket_t),1,fp);

                        found=1;

                }

        }

        fclose(fp);

 

        return found;

}

我突然觉得,现在是不错的节奏,fread(&temp,sizeof(ticket_t),1,fp);

                if (    temp->id==dat->id               )

                {

                        fseek(fp,-sizeof(ticket_t),SEEK_CUR);

                        fwrite(&temp,sizeof(ticket_t),1,fp);

                        found=1;

                }

这块是经过了修改,看了演出计划这一块,毕竟现在还是在边写边想的,所以,觉得之前还是有些逻辑错误的,so改成这个样子了。并且之前那只是读了一次。

 

现在是:按照ID从文件从查询票数据,并将其保存在buf所指的内存单元中:

int Ticket_Perst_SelectByID(int ID, ticket_t *buf) {

        FILE *fp;

        int found=0;

        ticket_t *temp;

 

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

        if (fp==NULL)

        {

                printf("Open fail!\n");

                return 0;

        }

 

        while ( !feof(fp)       )

        {

                fread(&temp,sizeof(ticket_t),1,fp);

                if ( temp->id==ID               )

                {

                        *buf=temp;

                        found=1;

                }

        }

 

        fclose(fp);

 

        return found;

}

*buf=temp这里,和之前比较,加了一个*,结构体的赋值语法吧,其它的,应该现在也没有问题咯。

 

而现在是:将票的ID与所对应的演出计划ID相同的放入list中:

int Ticket_Perst_SelectAll(ticket_list_t list) {

        FILE *fp;

        int l=0;

        ticket_list_t temp;

 

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

        if (fp==NULL    )

        {

                printf("Open fail!\n");

                return 0;

        }

 

        while ( !feof(fp)       )

        {

                fread(&temp,sizeof(ticket_t),1,fp);

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

                {

                        List_init(&list);

                        List_AddTail(list,temp);

                        l++;

                }

        }

 

        fclose(fp);

 

        return l;

}

目前也没有什么问题,当然,唯一就是

 List_init(&list);

 List_AddTail(list,temp);

这里调用链表函数,现在逻辑就是这样没错,问题就是调用的对不对。

 

 

 

最后一个了,这是从文件获取与主键为schedule_id相关的所有票数据组织成头指针为list的链表:

int Ticket_Perst_SelectBySchID(ticket_list_t list, int schedule_id) {

        FILE *fp;

        ticket_list_t temp;

        int l=0;

 

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

        if (fp==NULL)

        {

                printf("Open fail!\n");

                return 0;

        }

 

        while ( !feof(fp)       )

        {

                fread(&temp,sizeof(ticket_t),1,fp);

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

                {

                        List_init(list);

                        List_AddTail(list,temp);

                        l++;

                }

        }

 

        fclose(fp);

 

        return l;

}

其实,现在一个是文件的打开方式raw什么b的,依旧还就是函数内的结构体还是结构体链表调用,反正现在觉得,函数内的类型,和函数括号里的参数一致是吧。。。。。。。

 

进行编译:

Ticket_Persist.c: In function Ticket_Perst_Insert:

Ticket_Persist.c:16:20: error: expected =,;asm’ or __attribute__’ before ==’ token

  ticket_list_t head==NULL;

                    ^

Ticket_Persist.c:16:20: error: expected expression before ==’ token

Ticket_Persist.c:20:2: error: expected ;’ before if

  if (fp==NULL)

  ^

Ticket_Persist.c:28:21: error: head’ undeclared (first use in this function)

  while (list->next!=head)

                     ^

Ticket_Persist.c:28:21: note: each undeclared identifier is reported only once for each function it appears in

Ticket_Persist.c: In function Ticket_Perst_Delete:

Ticket_Persist.c:62:2: error: expected ;’ before }’ token

  }

  ^

Ticket_Persist.c: In function Ticket_Perst_Update:

Ticket_Persist.c:77:2: error: expected ;’ before if

  if (fp==NULL)

  ^

Ticket_Persist.c: In function Ticket_Perst_SelectByID:

Ticket_Persist.c:115:8: error: incompatible types when assigning to type ticket_t’ from type struct ticket_t *

    *buf=temp;

        ^

Ticket_Persist.c: In function Ticket_Perst_SelectAll:

Ticket_Persist.c:140:32: error: ticket_t’ has no member named play_id

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

                                ^

Ticket_Persist.c: At top level:

Ticket_Persist.c:223:1: error: expected identifier or (’ before }’ token

 }

开始修改了。现在是950

 

现在是1046.

我去,卡在一个问题上40多分钟了

int Ticket_Srv_AddBatch(int schedule_id, int studio_id){

 

        seat_list_t head=NULL;

        seat_list_t pos;

        seat_list_t new;

        List_init(&new);

        int count;

        ticket_list_t list;

 

        count=Seat_Srv_FetchByRoomID(new,studio_id);

 

        while ( count!=0 )

        {

                List_init(&list);

                Entkey_Srv_CompNewKey();

 

 

                for (   pos=head->next;pos!=head;pos=pos->next          )

                {

                        List_AddTail()

 

满满的都是链表什么的。

 

int Ticket_Srv_DeleteBatch(int schedule_id) {

        return Ticket_Perst_Delete(schdule_id);

}

 

int Ticket_Srv_Modify(const ticket_t * data){

        return Ticket_Perst_Update(data);

}

为了缓缓,写了两个简单的。

int Ticket_Srv_FetchByID(int ID, ticket_t *buf) {

        return Ticket_Perst_SelectByID(ID,buf);

}

 

int Ticket_Srv_FetchBySchID(ticket_list_t list, int schedule_id) {

        return Ticket_Perst_FetchBySchedule(list,schedule_id);

}

本以为我英语学的很好,结果这些函数名写了这么多天,想知道是什么意思的时候还是比较困难。--

从写了管理票的业务逻辑层的增添函数,发现链表的问题是最大的问题。逻辑问题我觉得已经不是问题了。

 

现在在和松松讨论。缓解心情。

 

现在是1912,整整过去了好几个小时,在这最后时刻,就让我花时间,将演出计划的界面层错误修改吧。开始。

scanf("%d%d%d%d%d",&new->data.play_id,&new->data.studio_id,&new->data.user.date_t date,&new->data.user_mytime_t time,&new->data.seat_count);

                                                                        ^

Schedule_UI.c:50:85: error: expected )’ before date

   scanf("%d%d%d%d%d",&new->data.play_id,&new->data.studio_id,&new->data.user.date_t date,&new->data.user_mytime_t time,&new->data.seat_count);

就这个类似的问题 大概占了1/2左右,然后,现在,看了看辅助资料,秒懂:

 

typedef struct {

int id;

int play_id;

int studio_id;

user_date_t date;

user_time_t time;

int seat_count;

}schedule_t;

 

 

typedef struct {

int year;

int month;

int day;

}user_date_t;

 

typedef struct {

int hour;

int minute;

int second;

}user_time_t;

 

意思就是scanf里要%d好多是吧!Oh吗 噶。。。。。。。。。。。。。。。

 

这周末再写课设总结吧。。。

 

课设最后一晚,修改演出计划界面!

typedef struct {

 

int id;

 

int play_id;

 

int studio_id;

 

user_date_t date;

 

user_time_t time;

 

int seat_count;

 

}schedule_t;

 

 

 

  scanf("%d%d%d%d%d",&new->data.play_id,&new->data.studio_id,&new->data.date.year,&new->data.date.month,&new->data.date.day,&new->data.time.hour,&new->data.time.minute,&new->data.time.second);

我的天啊,不容易啊,这个问题终于解决了。正确的调用结构体变量!

不要user_time_t。。。。。。类似的。

 

终于解决到看到希望了,没有致命错误了。主要就是以上那个问题好好解决下,然后其它都是些警告,或者函数调用或者数据类型转换。错误基本over了和逻辑错误也应该没有。

 

此刻思绪万千啊。回想着这段时间,哦不,现在不能这样,忍住,还有明天早上,最后的战争。

 

这几天反正天天都收获挺大的吧。

 

明天见!等我课设总结!

你可能感兴趣的:(工作,一周)