接下来是主程序
#include "const.h"
#include "ListFac.c"
/*******全局变量*******/
Class List *list = NULL;
/**********************/
/*******功能区域*******/
/*欢迎界面*/
void welcome(){
printf("\n欢迎使用List演示程序!\n");
printf("作者:voldemort\n");
printf("输入help可以得到帮助\n\n");
}
/*销毁一个list*/
void destroy(){
if(list==NULL){
printf("错误!不能销毁一个空表!\n\n");
}else{
list->destroy(list);
list=NULL;
printf("销毁表成功。\n\n");
}
}
/*程序退出*/
void quit(){
if(list!=NULL){
destroy();
}
printf("\n再见!\n");
}
/*清屏*/
void cls(){
int i=25;
while(printf("\n"),i--);
}
/*创建一个List*/
void create(){
int init_size,increment,listType;
if(list!=NULL){
printf("错误!只能创建一个表。\n\n");
}else{
printf("<创建表>\n");
while(1){
printf("输入表的初始大小: ");scanf("%d",&init_size);
if(init_size<=0){
printf("错误!初始大小必须是一个大于0的整数!\n");
}else{
break;
}
}
while(1){
printf("输入自增量:");scanf("%d",&increment);
if(increment<=0){
printf("错误!自增量必须是一个大于0的整数!\n");
}else{
break;
}
}
while(1){
printf("输入表的类型(0-数组表/1-链式表):");
scanf("%d",&listType);
if(listType!=0 && listType!=1){
printf("错误!表的类型只能是0或者1!\n");
}else{
break;
}
}
list = ListFactory(init_size,increment,listType);
if(list==NULL){
printf("错误!创建表失败!\n");
}else{
printf("创建表成功。\n\n");
}
}
}
/*插入一个数据*/
void insert(){
int index;
int value;
Status status;
Class Element *element = NULL;
if(list==NULL){
printf("错误!不能插入一个元素到一个空表中!\n\n");
}else{
printf("<插入元素>\n");
while(1){
printf("输入插入的位置(0~%d):",list->length);scanf("%d",&index);
if(index<0){
printf("错误!插入的位置必须是一个不小于0的整数!\n");
}else if(index>list->length){
printf("错误!插入的位置不能大于 %d\n",list->length);
}else{
break;
}
}
printf("输入元素的值:");scanf("%d",&value);
element = Element_new(value);
if(element==NULL){
printf("错误!创建元素失败!插入操作失败!\n");
}else{
status = list->insert(list,index,element);
if(status==STATUS_FAIL){
printf("错误!插入操作失败!\n");
}else{
printf("插入操作成功!\n\n");
}
}
}
}
/*描述list表*/
void describe(){
if(list==NULL){
printf("错误!不能描述一个空表\n\n");
}else{
printf("<描述表>\n");
printf("+-----------------+----------------+\n");
printf("| 内存地址 | %-15p|\n",list);
printf("+-----------------+----------------+\n");
printf("| 元素存储地址 | %-15p|\n",list->elements);
printf("+-----------------+----------------+\n");
printf("| 元素个数 | %-15d|\n",list->length);
printf("+-----------------+----------------+\n");
printf("| 当前大小 | %-15d|\n",list->size);
printf("+-----------------+----------------+\n");
printf("| 自增量大小 | %-15d|\n",list->increment);
printf("+-----------------+----------------+\n\n");
}
}
/*清除表中所有元素*/
void clear(){
if(list==NULL){
printf("错误!不能清除一个空表的内容!\n\n");
}else{
list->clear(list);
printf("清除成功!\n\n");
}
}
/*删除元素*/
void delete(){
int index;
Status status;
if(list==NULL){
printf("错误!不能从一个空表中删除元素!\n\n");
}else if(list->isEmpty(list)){
printf("错误!元素集合为空!\n\n");
}else{
while(1){
printf("输入要删除元素的位置(0~%d):",list->length-1);scanf("%d",&index);
if(index<0){
printf("错误!被删除元素的位置必须是不小于0的整数!\n");
}else if(index>=list->length){
printf("错误!被删除元素的位置不能大于%d\n",list->length-1);
}else{
break;
}
}
status = list->delete(list,index);
if(status==STATUS_FAIL){
printf("错误!删除失败!\n\n");
}else{
printf("删除成功!\n\n");
}
}
}
/*列出所有元素*/
void show(){
int index;
Class Element *element=NULL;
char string[80];
if(list==NULL){
printf("错误!不能从一个空表中列出元素!\n\n");
}else if(list->isEmpty(list)){
printf("该表中无元素。\n\n");
}else{
printf("<列出表中所有元素>\n");
printf("+----------+----------+----------+----------+\n");
printf("| 元素地址 | 元素序列 | 值地址 | 元素值 |\n");
printf("+----------+----------+----------+----------+\n");
for(index=0;index<list->length;index++){
element = list->getElement(list,index);
element->toString(element,string);
printf("| %-8p | %-8d | %-8p | %-8s |\n",element,index,element->value,string);
printf("+----------+----------+----------+----------+\n");
}
printf("<统计>\n");
printf("元素个数:%d\n\n",list->length);
}
}
/*帮助*/
void help(){
printf("<帮助命令>\n");
printf("+----------+--------------------+\n");
printf("| 命令 | 说明 |\n");
printf("+----------+--------------------+\n");
printf("| help | 帮助 |\n");
printf("| cls | 清屏 |\n");
printf("| destroy | 销毁表 |\n");
printf("| create | 创建表 |\n");
printf("| delete | 删除元素 |\n");
printf("| quit | 退出程序 |\n");
printf("| welcome | 欢迎界面 |\n");
printf("| describe | 描述一个表 |\n");
printf("| insert | 插入一个元素 |\n");
printf("| show | 列出所有元素 |\n");
printf("| clear | 清除表中所有元素 |\n");
printf("+----------+--------------------+\n");
printf("\n\n");
}
/**********************/
int main(void){
char command[80];
welcome();
while(1){
printf("CMD#> ");scanf("%s",command);
if(!strcmp(command,"cls")){
cls();
}else if(!strcmp(command,"quit")||!strcmp(command,"exit")){
quit();
return 0;
}else if(!strcmp(command,"welcome")){
welcome();
}else if(!strcmp(command,"create")){
create();
}else if(!strcmp(command,"destroy")){
destroy();
}else if(!strcmp(command,"insert")){
insert();
}else if(!strcmp(command,"describe")){
describe();
}else if(!strcmp(command,"clear")){
clear();
}else if(!strcmp(command,"delete")){
delete();
}else if(!strcmp(command,"show")){
show();
}else if(!strcmp(command,"help")){
help();
}else{
printf("错误命令\n\n");
}
}
return 0;
}