很早前幫朋友寫的,跟你的需求很像,給你用吧。

創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站設(shè)計、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元彌勒做網(wǎng)站,已為上家服務(wù),為彌勒各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108
你可改下main函數(shù),使它更貼近你的需求。
如果你不會改,再幫你改吧。
-------------------------------------------
#include time.h
#include stdio.h
#define NULL -2
#define ERROR -1
#define OK 1
#define TRUE 2
#define FALSE 3
#define Boolen int
#define Status int
#define LIST_INIT_SIZE 3
#define LIST_INCREMENT 2
#define NAME_LEN 13
#define DES_LEN 30
char ErrDescription[DES_LEN];
typedef struct{
int NO;
char Name[NAME_LEN];
enum{male,female} Sex;
int Age;
char Tel[15];
char Inserttime[64];
}ElemType,*ElemPointer;
typedef struct{
ElemPointer base; //基址
int length; //表長
int listsize; //內(nèi)存占用
int elemcount; //記錄數(shù)
}SqList,*SqPointer;
int ErrorEXP(int i)
{
switch(i)
{ case 1: strcpy(ErrDescription,"InitList::(ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType)) 空間申請失敗");break;
case 2: strcpy(ErrDescription,"IncreaseList::(ElemType *)realloc(L-base,(L-length + LIST_INCREMENT) * sizeof(ElemType)) 空間申請失敗");break;
case 3: strcpy(ErrDescription,"if(!L-base) return Error; SqList不存在");break;
case 4: strcpy(ErrDescription,"GetElem:: i 越界");break;
case 5: strcpy(ErrDescription,"ListInsert:: i 越界");break;
case 6: strcpy(ErrDescription,"ListInsert:: CALL IncreaseList(L)==ERROR return Error 鄰接空間申請失敗,由ListInsert返回");break;
case 7: strcpy(ErrDescription,"ListDelete:: i 越界");break;
case 8: strcpy(ErrDescription,"KeyInList:: i 越界");break;
case 9: strcpy(ErrDescription,"KeyInList:: CALL ListInsert(L,i,temp)==ERROR return Error 鄰接空間申請失敗,由KeyInList返回");break;
case 10: strcpy(ErrDescription,"ScanfList:: CALL KeyInList(L,i++)==ERROR return Error");break;
}
puts("!!!!!!!!!!!!!!! ERROR !!!!!!!!!!!!!!!\n");
puts(ErrDescription);
puts("\n!!!!!!!!!!!!!!! ERROR !!!!!!!!!!!!!!!\n");
return ERROR;
}
Status InitList(SqPointer L)
{
L-base = 0; //不可不要!!! 去掉后即使(ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType))失敗,系統(tǒng)也會認(rèn)為正常
L-base = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if(!L-base) return ErrorEXP(1); //空間申請失敗,返回
L-length = LIST_INIT_SIZE;
L-listsize = L-length * sizeof(ElemType);
L-elemcount = 0;
return OK;
}
Status IncreaseList(SqPointer L)
{
ElemPointer newbase;
newbase = (ElemType *)realloc(L-base,(L-length + LIST_INCREMENT) * sizeof(ElemType));
if(!newbase) return ErrorEXP(2);
L-base = newbase;
L-length += LIST_INCREMENT;
L-listsize = L-length * sizeof(ElemType);
return OK;
}
Status DestroyList(SqPointer L)
{
if(!L-base) return ErrorEXP(3); //L不存在,返回
free(L-base);
L-length = NULL;
L-listsize = NULL;
L-elemcount = NULL;
return OK;
}
Status ClearList(SqPointer L)
{
if(!L-base) return ErrorEXP(3); //L不存在,返回
L-elemcount = 0;
return OK;
}
Boolen ListEmpty(SqPointer L)
{
if(!L-base) return ErrorEXP(3); //L不存在,返回
if(L-elemcount == 0)
return TRUE;
else
return FALSE;
}
int ListElemCount(SqPointer L)
{
if(!L-base) return ErrorEXP(3); //L不存在,返回
return L-elemcount;
}
Status GetElem(SqPointer L,int i,ElemType *ret) //調(diào)用此函數(shù)需將ret指向main函數(shù)域某一ElemType變量
{
if(!L-base) return ErrorEXP(3); //L不存在,返回
if(i L-elemcount) return ErrorEXP(4); //i越界,返回
*ret = L-base[i-1]; //i 從1開始 此種方法在main中改變*ret會直接更改鏈表中數(shù)據(jù)
return OK;
}
//重大發(fā)現(xiàn) 指針型 temp-base 普通型L.base
int LocateElem(SqPointer L,char Locatename[]) //返回的i從1開始
{
int i=0;
ElemType *temp;
if(!L-base) return ErrorEXP(3); //L不存在,返回
while(iL-elemcount)
{
temp=(L-base[i]); //改為temp=L-base[i++];并去除下面的i++; ??
if(strcmp(temp-Name,Locatename) == 0) return i+1; //不能用temp-Name==locatename來試圖比較字符串
i++;
}
return 0;
}
Status ListInsert(SqPointer L,int i,ElemType newelem) //插入位置1=i=elemcount+1
{
ElemPointer newbase;
ElemType *temp,*flag;
if(!L-base) return ErrorEXP(3); //L不存在,返回
if(i1 || iL-elemcount + 1) return ErrorEXP(5);
if(L-elemcount == L-length)
if(IncreaseList(L)==ERROR) return ErrorEXP(6);
flag=(L-base[i-1]); //插入位置
for(temp=(L-base[L-elemcount-1]);temp=flag;temp--)
*(temp+1)=*temp;
*flag=newelem;
L-elemcount++;
return OK;
}
Status ListDelete(SqPointer L,int i,ElemType *ret) //調(diào)用此函數(shù)需將ret指向main函數(shù)域某一ElemType變量
{
ElemType *temp;
if(!L-base) return ErrorEXP(3); //L不存在,返回
if(i1 || iL-elemcount) return ErrorEXP(7);
*ret=L-base[i-1]; //刪除位置,這里先返回該值
for(temp=(L-base[i]);temp=(L-base[L-elemcount-1]);temp++)
*(temp-1)=*temp;
L-elemcount--;
return OK;
}
Status KeyInList(SqPointer L,int i)
{
ElemType temp;
time_t t;
char tmp[64];
char S;
if(!L-base) return ErrorEXP(3); //L不存在,返回
if(i1 || iL-elemcount + 1) return ErrorEXP(8);
printf("正在輸入第%d個元素的值:",i);
printf("\n編號:(int)\n");
scanf("%d",temp.NO);
printf("\n姓名:(char *)\n");
scanf("%s",temp.Name);
printf("\n性別:(m or f)\n");
do{
S=getch();
if(S=='m')
temp.Sex=male;
else if(S=='f')
temp.Sex=female;
else
puts("Key in 'm' or 'f'.\n");
}while(S!='m' S!='f');
putchar(S);
printf("\n年齡:(int)\n");
scanf("%d",temp.Age);
printf("\n電話:(char *)\n");
scanf("%s",temp.Tel);
printf("\n記錄時間:\n");
t=time(0);
strftime(tmp,sizeof(tmp),"%Y/%m/%d %X %A 本年第%j天 %z",localtime(t));
puts(tmp);
strcpy(temp.Inserttime,tmp);
if(ListInsert(L,i,temp)==OK)
return OK;
else
return ErrorEXP(9);
}
ElemType ScanfElem()
{
ElemType temp;
time_t t;
char tmp[64];
char S;
printf("正在錄入元素:");
printf("\n編號:(int)\n");
scanf("%d",temp.NO);
printf("\n姓名:(char *)\n");
scanf("%s",temp.Name);
printf("\n性別:(m or f)\n");
do{
S=getch();
if(S=='m')
temp.Sex=male;
else if(S=='f')
temp.Sex=female;
else
puts("Key in 'm' or 'f'.\n");
}while(S!='m' S!='f');
putchar(S);
printf("\n年齡:(int)\n");
scanf("%d",temp.Age);
printf("\n電話:(char *)\n");
scanf("%s",temp.Tel);
printf("\n記錄時間:\n");
t=time(0);
strftime(tmp,sizeof(tmp),"%Y/%m/%d %X %A 本年第%j天 %z",localtime(t));
puts(tmp);
strcpy(temp.Inserttime,tmp);
return temp;
}
Status ScanfList(SqPointer L,int i)
{
char p='c';
while(putchar('\n'),p=='c'||p=='C')
{ p='\0';
if(KeyInList(L,i++)==ERROR) return ErrorEXP(10);
printf("\nPress ESC key to exit or 'C' to continue...");
while(p!='c' p!='C' (int)p!=27)
p=getch();
}
return OK;
}
Status PrintListProperty(SqPointer L)
{
puts("SqList L Property:");
if(!L-base)
{ puts("鏈表不存在!");
return OK;}
else
puts("鏈表已初始化...\n");
printf("%d/%d BASE=%d,MemoryStatus=%d\n",L-elemcount,L-length,L-base,L-listsize);
return OK;
}
Status PrintOnScreen(SqPointer L)
{
int i;
char Stmp[7],t;
if(!L-base) return ErrorEXP(3); //L不存在,返回
puts("Push 'C' shell CLS or other key to skip.");
t=getch();
if(t=='c' || t=='C')
system("cls");
puts("數(shù)據(jù)表打印:");
for(i=0;i=L-elemcount-1;i++)
{ printf("\nElem %d st:\n",i+1);
if(L-base[i].Sex == male)
strcpy(Stmp,"male");
else if(L-base[i].Sex == female)
strcpy(Stmp,"female");
else
strcpy(Stmp,"Unknow");
printf("NO:%d\tName:%s\t\tSex:%s\tAge:%d\n\tTel:%s\n\tInsertTime:%s\n",L-base[i].NO,L-base[i].Name,Stmp,L-base[i].Age,L-base[i].Tel,L-base[i].Inserttime);
}
return OK;
}
Status PrintElem(ElemPointer elem)
{
char Stmp[7];
printf("\nPrintElem:\n");
if(elem-Sex == male)
strcpy(Stmp,"male");
else if(elem-Sex == female)
strcpy(Stmp,"female");
else
strcpy(Stmp,"Unknow");
printf("NO:%d\tName:%s\t\tSex:%s\tAge:%d\n\tTel:%s\n\tInsertTime:%s\n",elem-NO,elem-Name,Stmp,elem-Age,elem-Tel,elem-Inserttime);
return OK;
}
void main() //把以上所有函數(shù)都串了起來
{
SqList TheList;
SqPointer ListP;
ElemType mylistelem,*elemtemp;
ElemPointer mylist;
int i;
char nameT[20];
elemtemp=mylistelem; //*ret
ListP=TheList;
if(InitList(ListP)==OK) puts("InitList(TheList)==OK");
PrintListProperty(ListP);
if(ListEmpty(ListP)==TRUE) puts("ListEmpty==True");
else puts("ListEmpty==False");
ScanfList(ListP,1);
PrintListProperty(ListP);
PrintOnScreen(ListP);
printf("ListElemCount return %d.",ListElemCount(ListP));
puts("\nGetElem index? ");
scanf("%d",i);
if(GetElem(ListP,i,elemtemp)==OK) PrintElem(elemtemp);
puts("\nLocateElem name? ");
scanf("%s",nameT);
printf("LocateElem return %d.",LocateElem(ListP,nameT));
puts("\nListDelete index? ");
scanf("%d",i);
if(ListDelete(ListP,i,elemtemp)==OK) PrintElem(elemtemp);
puts("\nListInsert index? ");
scanf("%d",i);
puts("\nListInsert NEWELEM? ");
ListInsert(ListP,i,ScanfElem());
PrintListProperty(ListP);
PrintOnScreen(ListP);
if(ClearList(ListP)==OK) puts("ClearList==OK");
if(ListEmpty(ListP)==TRUE) puts("ListEmpty==True");
if(DestroyList(ListP)==OK) puts("DestroyList==OK");
getch();
}
/* 函數(shù)列表
類型 名稱 參數(shù) 說明
int ErrorEXP (int i) 錯誤描述符
Status InitList (SqPointer L) 初始化SqPointer L... 通過L返回base
Status IncreaseList (SqPointer L) L當(dāng)前滿時,繼續(xù)申請空間
Status DestroyList (SqPointer L) 銷毀L
Status ClearList (SqPointer L) 把L置為空表
Boolen ListEmpty (SqPointer L) 判斷L是否為空表,是則返回TRUE
int ListElemCount (SqPointer L) 返回當(dāng)前L中記錄的元素個數(shù)
Status GetElem (SqPointer L,int i,ElemType *ret) 通過*ret返回i號元素
int LocateElem (SqPointer L,char Locatename[]) 順序查找表,根據(jù)name字段,返回首個匹配元素的i,無則返回0
Status ListInsert (SqPointer L,int i,ElemType newelem) 在L中的i號位置插入newelem元素
Status ListDelete (SqPointer L,int i,ElemType *ret) 刪除L中第i號元素,并用*ret返回該元素
Status KeyInList (SqPointer L,int i) 從鍵盤輸入單個元素并插入到i號位置
ElemType ScanfElem () 從鍵盤輸入單個元素返回一個ElemType類型的節(jié)點
Status ScanfList (SqPointer L,int i) 從i號開始遞增順序錄入元素到L,直到按'ESC'
Status PrintListProperty(SqPointer L) 打印L的屬性,打印格式為(已用空間/已申請空間 基址 內(nèi)存占用)
Status PrintOnScreen (SqPointer L) 打印整張L表到屏幕
Status PrintElem (ElemPointer elem) 打印單個ElemType類型的元素
時間倉促,所以亂了些,書上2章開頭 動態(tài)線性的順序表 的基本操作幾乎都寫了
不知你說的是不是這個,mian函數(shù)比較亂,只是把所有的基本操作都串了起來,你
可以根據(jù)情況改改主函數(shù)的調(diào)用過程,就會比較清楚是怎么實現(xiàn)的了。你可以按F10
進(jìn)行單部跟蹤,F(xiàn)11可以進(jìn)入調(diào)用過程,一步一步跟著程序走一遍就好了。
關(guān)于動態(tài)鏈表的我之前寫過一個,也好象給你看過,這里再附上一起發(fā)過去。文件LinkList.c
只實現(xiàn)了構(gòu)造鏈表,并打印出來的功能。
*/
#includestdio.h
#define?maxn?1024
int?arr[maxn],?n;
void?add(int?value)
{
arr[n?-?1]?=?value;
return;
}
void?del(int?index)
{
int?i,?j;
for(i?=?index;?i??n?-?1;?i++)
arr[i]?=?arr[i?+?1];
n--;
return;
}
void?update(int?index,?int?value)
{
arr[index]?=?value;
return;
}
void?search(int?index)
{
printf("%d\n",?arr[index]);
return;
}
void?BubbleSort(int?count)
{
int?i,?j;
for(i?=?0;?i??count;?i++)
{
for(j?=?count?-?1;?j??i;?j--)
{
if(arr[j]??arr[j-1])
{
int?temp?=?arr[j-1];
arr[j?-?1]?=?arr[j];
arr[j]?=?temp;
}
}
}
return;
}
int?main(void)
{
n?=?0;
return?0;
}
我曾經(jīng)寫過C語言的數(shù)據(jù)庫系統(tǒng)..
給你部分代碼(一個銷售函數(shù))以作參考...
void
book_out()
//銷售函數(shù)
{
char
temp;
EXEC
SQL
BEGIN
DECLARE
SECTION;
/*主變量定義開始.*/
int
Hout_shuliang;
int
Hshuliang;///////////
char
Hbook_id[11];
EXEC
SQL
END
DECLARE
SECTION;
/*主變量定義結(jié)束*/
lab3:
printf("請輸入圖書編號:");
scanf("%s",Hbook_id);
printf("請輸入賣出本數(shù):");
scanf("%d",Hout_shuliang);
//先將庫存量取出到主變量
EXEC
SQL
select
book_shuliang
into
:Hshuliang
from
book_kucun
where
book_id=:Hbook_id;
if(HshuliangHout_shuliang)
//假如庫存不足,銷售不成功.
{
printf("輸入有誤.沒那么多庫存,請重新輸入.\n");
goto
lab3;
}
//將銷售記錄插入到book_out(銷售表)數(shù)據(jù)表.
EXEC
SQL
insert
into
book_out
values(:Hbook_id,:Hout_shuliang,GETDATE());
EXEC
SQL
COMMIT
TRANSACTION;
/*事務(wù)提交*/
printf("售出成功,輸入Y繼續(xù)輸入其他要售出的書.其他鍵返回主菜單:");
getchar();//////////////////////////
scanf("%c",temp);
if(temp=='y'||temp=='Y')
goto
lab3;
}
名稱欄目:c語言函數(shù)增刪 c語言增加函數(shù)怎么寫
文章位置:http://chinadenli.net/article6/doghhog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、全網(wǎng)營銷推廣、網(wǎng)站設(shè)計、品牌網(wǎng)站設(shè)計、外貿(mào)網(wǎng)站建設(shè)、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)