主题:[原创]程序改错//用顺序表练习的一个程序
//[color=800000]这是个非常粗糙的程序,关于背单词.有空帮我改改,小弟先谢咯[em3][/color]
//这个单词本里插入,删除,都是默认在线形表的表尾.然后TravelList时从表尾开始一直访问到表头.
//在这个线形表里与我平常的线形表有一点不同,它的第一个数据项不是ElemType *elem.而是一个结构体struct WordType word.这里存放一个单词的全部信息:单词,翻译,例子.
#include "stdafx.h"
#include "stdio.h"
#include "time.h"
#include "dos.h"
#include "string.h"
#include "malloc.h"
#define NULL 0
#define ERROR -1
#define OK 1
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define intpn 10//单词翻译的字符数
#define egn 20//单词例子的字符数
#define ESC 0x001b
typedef char ElemType;
typedef struct {
ElemType *_word;//单词,唯一性
ElemType *intp;//单词解释,在一个小单词本里,也可算是唯一性
ElemType *eg;//单词的例子
}WordType;
typedef struct {
struct WordType *word;
int length;
int listsize;
} SqList ; // 顺序存储的线性表类型
int InitList_Sq (SqList &L)//初始化线形表
{ FILE *fp;
fp=fopen("wordnote.dat","wb+");
L.word=(struct *)malloc(LIST_INIT_SIZE*sizeof(struct Sqlist));
if (!L.word) return ERROR;
L.length=0;
L.listsize=LIST_INIT_SIZE;
fclose(fp);
return OK;
}
int DelList_Sq (SqList &L,ElemType *word_cur)//删除单词word_cur
{ FILE *fp;
fp=fopen("wordnote.dat","wb+");
if(fp==NULL)
{printf("文件打开失败,任意键继续:(\n");
return 0;
}
else
{
struct WordType *word_temp;
int i,j=0,k;
for(i=0;i<strlen(word_cur);i++)word_temp._word[i]=word_cur[i];
while(strcmp(word_temp._word,L.word[i]._word))j++;
if(j>=strlen(L.length))return ERROR;
else{
for(k=j;k<L.length;k++)L.word[k]=L.word[k+1];
L.length--;
}
fclose(fp);
return OK;
}
int InsertList_Sq (SqList &L,ElemType *word_cur)//插入单词word_cur
{ int j,k,a,b;
char intp_cur,eg_cur;
struct WordType word_temp;
FILE *fp;
fp=fopen("wordnote.dat","wb+");
if(fp==NULL)
{printf("文件打开失败,任意键继续:(\n");
return 0;
}
else{
//循环体的语句完成数据元素后移一个单元格功能
//k的初值为最后一个数据元素的下标 终值为原线性表的第i数据元素下标
for(j=0;j<strlen(word_cur);j++)
{while(word_cur[j]!='\n')word_temp._word[j]=word_cur[j];}
L.word[i-1]=word_temp._word;
printf("输入单词的翻译\n");
scanf("%intpn*c",&intp_cur);
for(a=0;a<10;a++){L.word[L.length].intp[a]=intp_cur;}
printf("输入单词的例子\n");
scanf("%egn*c",%eg_cur);
for(b=0;b<20;b++){L.word[L.length]._word[b]=eg_cur;}
L.length++;}
fclose(fp);
return OK;
}
void ResetList_Sq (SqList &L,ElemType *word_cur)//修改已经存在单词本里的单词
{int i=0,a,b;
char intp_cur,eg_cur;
struct WordType word_temp;
FILE *fp;
fp=fopen("wordnote.dat","wb+");
if(fp==NULL)
{printf("文件打开失败,任意键继续:(\n");
return 0;
}
else
{while(strcmp(word_temp._word,L.word[i]._word)!=0)i++;
if(i>=L.length)printf("这个单词不存在,重新输入:)\n");
else{printf("请修改这个单词的解释:\n");
scanf("%intpn*c",&intp_cur);
for(a=0;a<strlen(intp_cur);a++)L.word[i].intp[a]=intp_cur[a];
printf("\n请修改这个单词的例子:\n");
scanf("%egn*c",&eg_cur);
for(b=0;b<strlen(eg_cur);b++)L.word[i].eg[b]=eg_cur[b];
}
}
fclose(fp);
}
void TravelList_Sq (SqList L,int li)//采用递归算法,最开始背诵最后一个单词,依次望前背诵.
{ int i,j=0,a;
li=L.length-1;
ElemType *word_cur;
struct WordType word_temp;
printf("单词解释:\n");
for(a=0;a<strlen(L.word[li].intp);a++)printf("%c",L.word[li].intp[a]);
printf("请输入单词:\n");
scanf("%*c",&*word_cur);
for(i=0;i<strlen(word_cur);i++)
{word_temp._word[i]=word_cur[i];}
if(strcmp(L.word[li]._word,word_cur))
{
printf("单词错误:(请想想\n");//和单词比较
TravelList_Sq(L,li);
}
else
{printf("单词正确:)\n");
TravelList_Sq(L,li-1);
}
//for (i=0;i<=L.length-1;i++)
//visit(L.elem[i]) ;
}
void main()
{
char key;
struct tm tm;
_getsystime(&tm);
printf("\t\t\t\t单词背诵\t\t\t\t时间:%d月%d天%时\n",tm.tm_mon,tm.tm_mday,tm.tm_hour);
printf("\t\t\t\t制作日期:2006年7月");
printf("操作向导:\n数字1:背单词;数字2:插入生单词;数字3:删除已背熟的单词\n");
scanf("%c",&key);
switch((int)key){
case 0x0031:TravelList_Sq (SqList L,ElemType *intp_temp);//键盘数字1
case 0x0032:InsertList_Sq (SqList &L,ElemType *word_cur);//键盘数字2
case 0x0033:ResetList_Sq (SqList &L,ElemType *word_cur);//键盘数字3
case 0x0034:DelList_Sq (SqList &L,ElemType *word_cur);//键盘数字4
case ESC:return 0;
}
main();
}
//这个单词本里插入,删除,都是默认在线形表的表尾.然后TravelList时从表尾开始一直访问到表头.
//在这个线形表里与我平常的线形表有一点不同,它的第一个数据项不是ElemType *elem.而是一个结构体struct WordType word.这里存放一个单词的全部信息:单词,翻译,例子.
#include "stdafx.h"
#include "stdio.h"
#include "time.h"
#include "dos.h"
#include "string.h"
#include "malloc.h"
#define NULL 0
#define ERROR -1
#define OK 1
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define intpn 10//单词翻译的字符数
#define egn 20//单词例子的字符数
#define ESC 0x001b
typedef char ElemType;
typedef struct {
ElemType *_word;//单词,唯一性
ElemType *intp;//单词解释,在一个小单词本里,也可算是唯一性
ElemType *eg;//单词的例子
}WordType;
typedef struct {
struct WordType *word;
int length;
int listsize;
} SqList ; // 顺序存储的线性表类型
int InitList_Sq (SqList &L)//初始化线形表
{ FILE *fp;
fp=fopen("wordnote.dat","wb+");
L.word=(struct *)malloc(LIST_INIT_SIZE*sizeof(struct Sqlist));
if (!L.word) return ERROR;
L.length=0;
L.listsize=LIST_INIT_SIZE;
fclose(fp);
return OK;
}
int DelList_Sq (SqList &L,ElemType *word_cur)//删除单词word_cur
{ FILE *fp;
fp=fopen("wordnote.dat","wb+");
if(fp==NULL)
{printf("文件打开失败,任意键继续:(\n");
return 0;
}
else
{
struct WordType *word_temp;
int i,j=0,k;
for(i=0;i<strlen(word_cur);i++)word_temp._word[i]=word_cur[i];
while(strcmp(word_temp._word,L.word[i]._word))j++;
if(j>=strlen(L.length))return ERROR;
else{
for(k=j;k<L.length;k++)L.word[k]=L.word[k+1];
L.length--;
}
fclose(fp);
return OK;
}
int InsertList_Sq (SqList &L,ElemType *word_cur)//插入单词word_cur
{ int j,k,a,b;
char intp_cur,eg_cur;
struct WordType word_temp;
FILE *fp;
fp=fopen("wordnote.dat","wb+");
if(fp==NULL)
{printf("文件打开失败,任意键继续:(\n");
return 0;
}
else{
//循环体的语句完成数据元素后移一个单元格功能
//k的初值为最后一个数据元素的下标 终值为原线性表的第i数据元素下标
for(j=0;j<strlen(word_cur);j++)
{while(word_cur[j]!='\n')word_temp._word[j]=word_cur[j];}
L.word[i-1]=word_temp._word;
printf("输入单词的翻译\n");
scanf("%intpn*c",&intp_cur);
for(a=0;a<10;a++){L.word[L.length].intp[a]=intp_cur;}
printf("输入单词的例子\n");
scanf("%egn*c",%eg_cur);
for(b=0;b<20;b++){L.word[L.length]._word[b]=eg_cur;}
L.length++;}
fclose(fp);
return OK;
}
void ResetList_Sq (SqList &L,ElemType *word_cur)//修改已经存在单词本里的单词
{int i=0,a,b;
char intp_cur,eg_cur;
struct WordType word_temp;
FILE *fp;
fp=fopen("wordnote.dat","wb+");
if(fp==NULL)
{printf("文件打开失败,任意键继续:(\n");
return 0;
}
else
{while(strcmp(word_temp._word,L.word[i]._word)!=0)i++;
if(i>=L.length)printf("这个单词不存在,重新输入:)\n");
else{printf("请修改这个单词的解释:\n");
scanf("%intpn*c",&intp_cur);
for(a=0;a<strlen(intp_cur);a++)L.word[i].intp[a]=intp_cur[a];
printf("\n请修改这个单词的例子:\n");
scanf("%egn*c",&eg_cur);
for(b=0;b<strlen(eg_cur);b++)L.word[i].eg[b]=eg_cur[b];
}
}
fclose(fp);
}
void TravelList_Sq (SqList L,int li)//采用递归算法,最开始背诵最后一个单词,依次望前背诵.
{ int i,j=0,a;
li=L.length-1;
ElemType *word_cur;
struct WordType word_temp;
printf("单词解释:\n");
for(a=0;a<strlen(L.word[li].intp);a++)printf("%c",L.word[li].intp[a]);
printf("请输入单词:\n");
scanf("%*c",&*word_cur);
for(i=0;i<strlen(word_cur);i++)
{word_temp._word[i]=word_cur[i];}
if(strcmp(L.word[li]._word,word_cur))
{
printf("单词错误:(请想想\n");//和单词比较
TravelList_Sq(L,li);
}
else
{printf("单词正确:)\n");
TravelList_Sq(L,li-1);
}
//for (i=0;i<=L.length-1;i++)
//visit(L.elem[i]) ;
}
void main()
{
char key;
struct tm tm;
_getsystime(&tm);
printf("\t\t\t\t单词背诵\t\t\t\t时间:%d月%d天%时\n",tm.tm_mon,tm.tm_mday,tm.tm_hour);
printf("\t\t\t\t制作日期:2006年7月");
printf("操作向导:\n数字1:背单词;数字2:插入生单词;数字3:删除已背熟的单词\n");
scanf("%c",&key);
switch((int)key){
case 0x0031:TravelList_Sq (SqList L,ElemType *intp_temp);//键盘数字1
case 0x0032:InsertList_Sq (SqList &L,ElemType *word_cur);//键盘数字2
case 0x0033:ResetList_Sq (SqList &L,ElemType *word_cur);//键盘数字3
case 0x0034:DelList_Sq (SqList &L,ElemType *word_cur);//键盘数字4
case ESC:return 0;
}
main();
}