2015年7月2日 软件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
}
开始修改了。现在是9:50。
现在是10:46.
我去,卡在一个问题上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);
}
本以为我英语学的很好,结果这些函数名写了这么多天,想知道是什么意思的时候还是比较困难。-,-哎
从写了管理票的业务逻辑层的增添函数,发现链表的问题是最大的问题。逻辑问题我觉得已经不是问题了。
现在在和松松讨论。缓解心情。
现在是19:12,整整过去了好几个小时,在这最后时刻,就让我花时间,将演出计划的界面层错误修改吧。开始。
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了和逻辑错误也应该没有。
此刻思绪万千啊。回想着这段时间,哦不,现在不能这样,忍住,还有明天早上,最后的战争。
这几天反正天天都收获挺大的吧。
明天见!等我课设总结!