第一篇:C語言食堂飯卡管理系統(tǒng)
食堂飯卡管理系統(tǒng)
3人 基本功能:
(1)發(fā)卡:學生員工持有效證件到管理處繳押金,辦理就餐卡,操作人員將相關內容寫入卡中,并自動產生編號,持卡人員再預交一定金額款項即可進行就餐。
(2)存款:持卡人在卡中存款快用完時,到管理處交款存入就餐卡中,并可打印一張收據。
(3)就餐:持卡人將就餐卡插入或接近窗口機,窗口機檢測是否有效,是否時本單位所發(fā)的卡,是否已被掛失,若有問題則窗口機報警,若正常則窗口機上數碼顯示就餐卡中的余額,工作人員鍵入本次用餐金額,并在數碼上顯示出來,若無誤按結算鍵寫卡,整個售飯過程完成。
(4)匯總統(tǒng)計:食堂就餐結束后,管理處計算機能通過聯網(或統(tǒng)計卡)取出各窗口機中的數據,進行統(tǒng)計分析,可統(tǒng)計出本餐售飯總收入,各窗口收入,各持卡人存款明細,本日、月存款金額,卡中流動資金總額,日餐報表,年餐報表等
(5)掛失:持卡人不慎將卡丟失,可到管理處進行掛失,管理處將掛失名單傳送到各窗口機中,用已掛失卡就餐就會報警,直到取消掛失為止,持卡人不會因卡丟失而引起經濟上的損失。
(6)注銷:學生離?;蚱渌颍辉倬筒蜁r,可到管理處注銷卡退取押金,該卡還可重新使用。
第二篇:學生成績管理系統(tǒng)、食堂飯卡系統(tǒng)
一、實驗目的
1.進一步熟悉數據類型、運算符、表達式、程序控制結構。2.掌握數組和動態(tài)鏈表的熟練使用.3.掌握指針的使用。4.掌握結構體的使用。5.學會使用函數。
6.以上知識的綜合練習完成學生成績管理系統(tǒng)、食堂飯卡終端系統(tǒng)代碼的編寫。7.要求實驗前打印有代碼的實驗報告,實驗課結束后交有手寫修改筆記的實驗報告。
二、實驗環(huán)境:(硬件環(huán)境、軟件環(huán)境)
1.windows 7操作系統(tǒng)
2.VC++編譯器
三、實驗過程:(內容、操作步驟、結果等)
內容一:學生成績管理系統(tǒng)
需求:
建立一個學生成績管理系統(tǒng),實現對學生成績的查詢管理等操作.1.該系統(tǒng)可以使用管理員身份登錄或者普通用戶登錄。2.只有管理員具有錄入學生信息的權利。
3.管理員登錄后有”顯示全部學生信息”、”查詢信息(通過名字或者學號查詢)”、”排序成績(可按 各科成績或者平均成績排序)”、”通過輸入學生學號修改學生信息”、”刪除學生”、”添加學生”、”保存信息”等功能。
4.普通用戶登錄有”顯示全部學生信息”、”根據學號查詢學生信息”?!鞍闯煽兣判颉钡裙δ?。
系統(tǒng)代碼:
#include
char name[20];
float yuwen;
float shuxue;
float yingyu;
float average;}Student;Student stu[100];int stulength;char filename[50]=“student.txt”;
void savefile(){ FILE *fp;
Student *p;
int i;1
p=stu;
fp=fopen(filename,“wb”);
if(fp==NULL)
{ printf(“打開文件失敗!n”);
return;
}
for(i=0;i { if(fwrite(p,sizeof(Student),1,fp)!=1) printf(“保存信息失敗!n”); p++; } fclose(fp);} void xianshi(){ Student *p; int i; p=stu; for(i=0;i { printf(“學號:%d 姓名:%s 語文成績:%.2f 數學成績:%.2f 績:%.2fn”,p->number,p->name,p->yuwen,p->shuxue,p->yingyu,p->average); p++; } } void addbyhand(){ Student *p; int i,n; p=stu; printf(“請輸入需要添加學生的人數:n”); scanf(“%d”,&n); for(i=0;i { printf(“請輸入學號:n”); scanf(“%d”,&(p->number)); printf(“請輸入姓名n”); scanf(“%s”,p->name); printf(“請輸入語文成績n”); scanf(“%f”,&(p->yuwen)); printf(“請輸入數學成績n”); scanf(“%f”,&(p->shuxue)); printf(“請輸入英語成績n”); scanf(“%f”,&(p->yingyu)); p->average=(p->yuwen+p->shuxue+p->yingyu)/3; p++; } stulength=n; savefile(); 英語成績:%.2f平均成} void addbyfile(){ FILE *fp; Student *p; int i=0; p=stu; fp=fopen(filename,“rb”); if(fp==NULL) { printf(“打開文件失敗n”); return; } while(fread(p,sizeof(Student),1,fp)==1) { i++; p++; } fclose(fp); stulength=i;} void chaxun(){ int i,xz,n; char m[20]; Student *p; p=stu; printf(“1->按學號查詢n2->按姓名查詢n”); scanf(“%d”,&xz); if(xz==1) { printf(“請輸入查詢的學號n”); scanf(“%d”,&n); for(i=0;i { if(p->number==n) { printf(“學號:%d 姓名:%s 語文成績:%.2f 數學成績:%.2f 績:%.2fn”,p->number,p->name,p->yuwen,p->shuxue,p->yingyu,p->average); break; } p++; } if(i==stulength) printf(“沒有找到該學生的信息n”); } if(xz==2) { printf(“請輸入查詢的姓名n”); scanf(“%s”,&m); for(i=0;i { if(strcmp(p->name,m)==0) { printf(“學號:%d 姓名:%s 語文成績:%.2f 數學成績:%.2f 英語成績:%.2f 英語成績:%.2f平均成平均成績:%.2fn”,p->number,p->name,p->yuwen,p->shuxue,p->yingyu,p->average); break; } p++; } if(i==stulength) printf(“沒有找到該學生的信息n”); } } void paixu(){ int i,j,xz; Student m; printf(“1->按平均成績排序n2->按語文成績排序n3->按數學成績排序n4->按英語成績排序n”); scanf(“%d”,&xz); if(xz==1) { for(i=0;i for(j=i+1;j if(stu[i].average { m=stu[i]; stu[i]=stu[j]; stu[j]=m; } for(i=0;i printf(“學號:%d 姓名:%s 語文成績:%.2f 數學成績:%.2f 英語成績:%.2f 績:%.2fn”,stu[i].number,stu[i].name,stu[i].yuwen,stu[i].shuxue,stu[i].yingyu,stu[i].average); } if(xz==2) { for(i=0;i for(j=i+1;j if(stu[i].yuwen { m=stu[i]; stu[i]=stu[j]; stu[j]=m; } for(i=0;i printf(“學號:%d 姓名:%s 語文成績:%.2f 數學成績:%.2f 英語成績:%.2f 績:%.2fn”,stu[i].number,stu[i].name,stu[i].yuwen,stu[i].shuxue,stu[i].yingyu,stu[i].average); } if(xz==3) { for(i=0;i for(j=i+1;j if(stu[i].shuxue { m=stu[i]; stu[i]=stu[j]; stu[j]=m; 平均成平均成 } for(i=0;i printf(“學號:%d 姓名:%s 語文成績:%.2f 數學成績:%.2f 英語成績:%.2f 平均成績:%.2fn”,stu[i].number,stu[i].name,stu[i].yuwen,stu[i].shuxue,stu[i].yingyu,stu[i].average); } if(xz==4) { for(i=0;i for(j=i+1;j if(stu[i].yingyu { m=stu[i]; stu[i]=stu[j]; stu[j]=m; } for(i=0;i printf(“學號:%d 姓名:%s 語文成績:%.2f 數學成績:%.2f 英語成績:%.2f 績:%.2fn”,stu[i].number,stu[i].name,stu[i].yuwen,stu[i].shuxue,stu[i].yingyu,stu[i].average); } } void tianjia(){ int i,n; Student *p; p=stu+stulength; printf(“請輸入需要添加學生信息的個數n”); scanf(“%d”,&n); for(i=stulength;i { printf(“請輸入學號:n”); scanf(“%d”,&p->number); printf(“請輸入姓名n”); scanf(“%s”,p->name); printf(“請輸入語文成績n”); scanf(“%f”,&p->yuwen); printf(“請輸入數學成績n”); scanf(“%f”,&p->shuxue); printf(“請輸入英語成績n”); scanf(“%f”,&p->yingyu); p->average=(p->yuwen+p->shuxue+p->yingyu)/3; p++; } stulength=stulength+n; savefile();} void shanchu(){ Student *p,*q; int i,n,m=0; 平均成 p=stu; q=stu; printf(“請輸入要刪除學生的學號:n”); scanf(“%d”,&n); for(i=0;i { if(p->number==n) { q=q+1; m=1; } *p=*q; p++; q++; } if(m==1) stulength--; else printf(“請輸入正確的學號!n”); savefile();} void xiugai(){ int i,n; Student *p; p=stu; printf(“請輸入需要修改的學號:n”); scanf(“%d”,&n); for(i=0;i { if(p->number==n) { printf(“請輸入語文成績n”); scanf(“%f”,&p->yuwen); printf(“請輸入數學成績n”); scanf(“%f”,&p->shuxue); printf(“請輸入英語成績n”); scanf(“%f”,&p->yingyu); p->average=(p->yuwen+p->shuxue+p->yingyu)/3; break; } p++; } if(i==stulength) printf(“請輸入正確的學號!n”); savefile();} void administroter(){ int xz; while(1) { printf(“1->添加n2->刪除n3->排序n4->查詢n5->顯示n6->修改n0->退出n”); scanf(“%d”,&xz); switch(xz) { case 0:return; case 1:tianjia();break; case 2:shanchu();break; case 3:paixu();break; case 4:chaxun();break; case 5:xianshi();break; case 6:xiugai();break; } } } void student(){ int xz; while(1) { printf(“1->排序n2->查詢n3->顯示n0->退出n”); scanf(“%d”,&xz); switch(xz) { case 0:return; case 1:paixu();break; case 2:chaxun();break; case 3:xianshi();break; } } } int main(){ int xz; addbyfile(); if(stulength==0) addbyhand(); while(1) { printf(“**********歡迎登陸成績管理系統(tǒng)**********n”); printf(“1->管理員登陸n2->學生登錄n0->退出n”); scanf(“%d”,&xz); switch(xz) { case 0:return 0; case 1:administroter(); case 2:student(); } } } 7 內容二:食堂飯卡終端系統(tǒng) 需求:1.飯卡有編號、姓名、余額、狀態(tài)四個屬性。 2.系統(tǒng)實現:添加飯卡,通過編號查詢飯卡余額,通過姓名查詢飯卡余額,飯卡充值,消費,掛失飯卡,飯卡解鎖(消除掛失恢復正常狀態(tài)),刪除飯等功能。 系統(tǒng)代碼: #include typedef struct Fanka { int kh; char name[20];float yu_e;char state; struct Fanka *next;}Fanka; Fanka *fankahead;int fankalenth;char filename[50]=“E:fanka.txt”; void savefile(){ FILE *fp; Fanka *p;int i=0;p=fankahead;fp=fopen(filename,“wb”); if(fp==NULL){ printf(“打開文件失敗!n”); return; } while(p!=NULL){ if(fwrite(p,sizeof(Fanka),1,fp)!=1) printf(“保存信息失敗!n”); p=p->next; i++;} fclose(fp);} void addbyhand(){ Fanka *p,*rear; int i,n;printf(“請輸入需要添加飯卡的個數:n”); scanf(“%d”,&n); for(i=0;i printf(“請輸入卡號:n”); scanf(“%d”,&p->kh); printf(“請輸入姓名:n”); scanf(“%s”,&p->name); printf(“請輸入初始余額:n”); scanf(“%f”,&p->yu_e); p->state='1'; if(i==0) { fankahead=p; rear=p; } else { rear->next=p; rear=p; } } rear->next=NULL; fankalenth=n;savefile();} void addbyfile(){ FILE *fp; Fanka *p,*rear;int i=0;char c;fp=fopen(filename,“rb”);if(fp==NULL){ printf(“打開文件失敗,請先建立文件!n”); return;} if(fscanf(fp,“%c”,&c)==EOF) addbyhand();else { p=(Fanka *)malloc(sizeof(Fanka)); fseek(fp,0,SEEK_SET); while(fread(p,sizeof(Fanka),1,fp)==1){ i++; if(i==1) { fankahead=p; rear=p; } else { rear->next=p; rear=p; } p=(Fanka *)malloc(sizeof(Fanka));} fclose(fp); rear->next=NULL; fankalenth=i;} } void xianshi(){ Fanka *p; p=fankahead; while(p!=NULL) { if(p->state=='1') printf(“%d %s %f 正常n”,p->kh,p->name,p->yu_e); else printf(“%d %s %f 掛失n”,p->kh,p->name,p->yu_e); p=p->next; } } void chaxun(){ int n,m; char na[20]; Fanka *p;p=fankahead;printf(“請選擇查詢的方式: 1、按卡號查詢。 2、按姓名查詢n”); scanf(“%d”,&n);if(n==1) { printf(“請輸入查詢的卡號n”); scanf(“%d”,&m); while(p!=NULL) { if(p->kh==m) { if(p->state=='1') printf(“%d %s %f 正常n”,p->kh,p->name,p->yu_e); else printf(“%d %s %f 掛失n”,p->kh,p->name,p->yu_e); break; } p=p->next; } if(p==NULL) printf(“沒有找到該卡號的信息!n”); } if(n==2){ printf(“請輸入查詢的姓名n”); scanf(“%s”,na); while(p!=NULL) { if(p->name==na) { if(p->state=='1') printf(“%d %s %f 正常n”,p->kh,p->name,p->yu_e); else printf(“%d %s %f 掛失n”,p->kh,p->name,p->yu_e); break; } p=p->next; } if(p==NULL) printf(“沒有找到該卡號的信息!n”);} return;} void guashi(){ int n; Fanka *p; p=fankahead; printf(“請輸入掛失的卡號!n”); scanf(“%d”,&n); while(p!=NULL) { if(p->kh==n) { p->state='0'; break; } p=p->next; } if(p==NULL) printf(“此卡無效,請輸入正確的卡號!n”); savefile();} void jiesuo(){ int n; Fanka *p; p=fankahead; printf(“請輸入解鎖的卡號!n”); scanf(“%d”,&n); while(p!=NULL) { if(p->kh==n) { p->state='1'; break; } p=p->next; } if(p==NULL) printf(“此卡無效,請輸入正確的卡號!n”); savefile();} void chongzhi(){ int n; float m; Fanka *p; p=fankahead; printf(“請輸入充值的卡號!n”); scanf(“%d”,&n); while(p!=NULL) { if(p->kh==n&&p->state=='1') { printf(“請輸入充值的金額:n”); scanf(“%f”,&m); printf(“%d %s %f 正常n”,p->kh,p->name,p->yu_e+m); break; } if(p->kh==n&&p->state=='0') { printf(“此卡已掛失,請解鎖后再充值!n”);break; } p=p->next; } if(p==NULL) printf(“此卡無效,請輸入真確的卡號n”); savefile();} void xiaofei(){ int n; float m; Fanka *p; p=fankahead; printf(“請輸入消費的卡號!n”); scanf(“%d”,&n); while(p!=NULL) { if(p->kh==n&&p->state=='1') { printf(“請輸入消費的金額:n”); scanf(“%f”,&m); if(p->yu_e>m) { p->yu_e=p->yu_e-m; printf(“%d %s %f 正常n”,p->kh,p->name,p->yu_e); break; } else { printf(“余額不足,請充值后再消費!n”); break; } } if(p->kh==n&&p->state=='0') { printf(“此卡已掛失,請解鎖后再消費!n”);break; } p=p->next; } if(p==NULL) printf(“此卡無效,請輸入正確的卡號n”); savefile();} void shanchu(){ int n,i=0; Fanka *p; p=fankahead; printf(“請輸入刪除飯卡的卡號n”); scanf(“%d”,&n); if(fankahead->kh==n) fankahead=p->next; while(p->next!=NULL) { if(p->next->kh!=n) p=p->next; else p->next=p->next->next; } fankalenth--; savefile();} void tianjia(){ Fanka *p,*q; p=fankahead; while(p->next!=NULL){p=p->next;} q=(Fanka *)malloc(sizeof(Fanka));printf(“請輸入卡號:n”); scanf(“%d”,&q->kh); printf(“請輸入姓名:n”); scanf(“%s”,&q->name); printf(“請輸入初始余額:n”); scanf(“%f”,&q->yu_e); q->state='1'; p->next=q; q->next=NULL; savefile(); fankalenth++;} int studentlogin(){ int xz;while(1){ system(“CLS”); printf(“1->顯示全部飯卡信息n2->查詢飯卡信息n3->飯卡掛失n4->消費n0->退出n”); scanf(“%d”,&xz); switch(xz){ case 0:return 0; case 1:xianshi();break; case 2:chaxun();break; case 3:guashi();break; case 4:xiaofei();break;} system(“PAUSE”);} return 0;} int administratorlogin(){ int xz; while(1) { system(“CLS”);printf(“1->顯示n2->添加飯卡n3->飯卡解鎖n4->飯卡充值n5->刪除飯卡n0->退出n”);scanf(“%d”,&xz); switch(xz){ case 0:return 0; case 1:xianshi();break; case 2:tianjia();break; case 3:jiesuo();break; case 4:chongzhi();break; case 5:shanchu();break;} system(“PAUSE”);} return 0; } int main(){ int xz; addbyfile(); while(1) { system(“CLS”); printf(“************歡迎登陸食堂飯卡管理系統(tǒng)************n”); printf(“請選擇用戶登陸身份:n1->管理員登陸n2->學生登陸n0->退出n”); scanf(“%d”,&xz); switch(xz) { case 0:return 0; case 1:administratorlogin();break; case 2:studentlogin();break; } system(“PAUSE”); } return 0;} 員工食堂飯卡管理規(guī)定 一、目的 規(guī)范用餐管理。 二、適用范圍 公司全體員工、公司保安、保潔人員、銷售代理公司員工、監(jiān)理公司員工。 三、職責 行政部負責對員工餐費進行統(tǒng)計,負責食堂刷卡設備及業(yè)務管理,飯卡的辦理、充值等。 四、管理辦法 (一)飯卡充值 1、首次發(fā)放飯卡和新員工入職領飯卡時,要在領取飯卡登記表上簽字。 2、飯卡充值每次不得少于200元/次。 3、每周星期三上午,由行政部統(tǒng)一充值,其余時間不予充值。 (二)飯卡掛失與補辦 1、員工要妥善保管飯卡,杜絕故意彎折、亂涂亂刻等損害飯卡的行為。 2、飯卡丟失后,飯卡持有人應持本人有效證件及時到行政部掛失,并補辦新卡。 3、如果因為丟失飯卡,沒有及時掛失補辦,導致飯卡金額損失的,其責任由持卡人承擔。 4、飯卡丟失或因個人原因導致飯卡折損無法使用時,到行政部補辦,按照原卡余額充值,工本費按8元/張收取。 5、員工離職時需將飯卡交還至行政部。 (三)其他 1、卡內金額不能兌換現金。 2、飯卡只限公司員工本人使用,不得轉借給公司員工以外人員。 五、本規(guī)定自2015年1月4日起實施。 六、本規(guī)定由行政部負責解釋權。 湖北清江臵業(yè)有限責任公司 行 政 部 2015年1月4日 食堂飯卡管理規(guī)定以及相關注意事項 為維護就餐秩序,保護用餐人員的利益,根據公司的有關文件精神,對飲食中心飯卡的使用與管理作如下規(guī)定: 1、飯卡為內置芯片非接觸式,由食堂監(jiān)控,辦公室管理發(fā)放,外協人員需繳納押金20元/卡(卡收回時全額返還,如有丟失補卡,收取成本費用),掛失補卡成本10元/卡,在飲食中心所屬食堂(餐廳)通用。 2、飯卡是持卡人帳戶(設立于計算機售飯系統(tǒng)中)的鑰匙,需預先到辦公樓3樓打印室充值方能使用。充值數額暫定標準為每月600元/卡,每月30日下午13:00—15:00將飯卡交還到辦公樓3樓打印室進行充值,每月1日上午9:00---11:00到辦公樓3樓領取充值完畢的飯卡。 3、注冊新卡時,必須持本人證件,本人工號(外協人員工號由制卡人員臨時辦理并登記),每人限辦一張(辦理 領取 充值等需要本人簽字登記確認)。 4、每張飯卡均設有就餐次數和金額限制,每餐定額10元,每日定次兩次就餐(特別注意:如果一餐刷兩次,則晚餐將無法刷卡就餐,若有特殊情況或者誤刷,需要和食堂管理員說明詳細情況,由食堂管理員視情況發(fā)餐)。為了保護您的經濟利益。所以必須持本人飯卡就餐。若有冒用,不帶飯卡等情況,一經發(fā)現食堂管理員有權了拒絕發(fā)餐。 5、持卡人要注意保持飯卡的清潔,以延長飯卡的壽命。 6、飯卡丟失后要立即掛失,以減少損失,從工作日早8:30到晚17:30均可到辦公樓3樓打印室辦理掛失和補卡事宜。 7、飯卡注冊、充值、掛失、解掛、換新、補卡均在辦公樓3樓打印室辦理。 8、為了維護持卡人的利益,餐飲中心嚴格執(zhí)行驗證制度,并為所有的用戶保守秘密。凡是辦理注冊、注銷、補卡、換卡等事宜必須持本人證件以及本人工號方可辦理。 9、請大家注意保護自己的飯卡,任何有意仿制、偽造飯卡及證件者,都屬于非法行為,一經發(fā)現將移交相關部門,從嚴處理。 10、本公司內的所有飯卡不辦理退款,提現(外協人員除外)。 為了維護所有持卡人的利益,我們嚴格執(zhí)行驗證制度,為所有的用戶保守秘密。同時對那些有意模仿、偽造飯卡及證件的么動機,都要移交相關部門,給予處罰(處罰方式分為:口頭警告,公司通告,罰款,解除勞動關系,情節(jié)嚴重將移送公安和司法機關進行處理)。我們的系統(tǒng)需要不斷的完善,我們的服務也需要不斷的提高。真誠的希望見到您的合理化建議。為了使您對我們服務范圍解,特公布如下: 機房對外服務的項目有:、飯卡充值(本公司人員免費,外協等其他人員憑相關領導文件確定是否收費)。2、飯卡掛失。(免費)、補卡、飯卡解掛。(需持本人證件,工本費10元/卡)4、個人飯卡注冊,查詢。 (需持本人證件,注:注冊要不超過管理范圍)3樓打印室對外服務的時間: 周一至周五 8:30 ―― 17:30注冊,掛失,補卡隨時辦理。 為了減少您的損失,飯卡丟失后請您立即掛失,早8:30 到晚 17:30 機房都有值班人員為您辦理掛失及補卡等事宜。 2017年5月 辦公樓3樓打印室 員工食堂飯卡管理規(guī)定 一、目的 規(guī)范用餐管理。 二、適用范圍 公司所有員工。 三、職責 綜合部負責對員工餐費進行統(tǒng)計,負責食堂刷卡設備及業(yè)務管理,飯卡的辦理、充值等。 財務部負責對員工充值款項的審核和月底結算。 四、管理辦法 (一)飯卡充值 1、首次發(fā)放飯卡和新員工入職領飯卡時,要在領取飯卡登記表上簽字。 2、綜合部根據各部門、各服務中心不同崗位員工用餐情況,核定餐補金額。 3、每月充值前由綜合部根據最新員工名冊核查,按照實際在崗人員進行充值。 4、每月21日下午,由綜合部統(tǒng)一充值并把飯卡發(fā)放給各部門、各服務中心負責人,再由負責人發(fā)放給本單位員工。 (二)飯卡掛失與補辦 1、員工要妥善保管飯卡,杜絕故意彎折、亂涂亂刻等損害飯卡的行為。 2、飯卡丟失后,飯卡持有人應持本人有效證件及時到綜合部掛失,并補辦新卡。 3、如果因為丟失飯卡,沒有及時掛失補辦,導致飯卡金額損失的,其責任由持卡人承擔。 4、飯卡丟失或因個人原因導致飯卡折損無法使用時,到綜合部補辦,按照原卡余額充值,工本費按5元/張收取。 5、員工離職時需將飯卡交還至綜合部,否則不予辦理離職手續(xù)。 (三)其他 1、卡內金額不能兌換現金,卡內余額當月充值時做清零處理。 2、飯卡只限公司員工本人使用,不得轉借給公司員工以外人員。 五、本規(guī)定自2013年4月1日起實施。 六、本規(guī)定由綜合部負責解釋權。第三篇:員工食堂飯卡管理規(guī)定
第四篇:食堂飯卡管理規(guī)定以及相關注意事項(定稿)
第五篇:員工食堂飯卡管理規(guī)定