




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
PAGEPAGE33課程設計報告課程名稱:院(系):專業班級:學號:姓名:指導老師:承諾書鄭重聲明:本人所呈交的課程設計是本人在導師指導下獨立撰寫并完成的,課程設計沒有剽竊、抄襲、造假等違反學術道德、學術規范和侵權行為。本課程設計不包含任何其他個人或集體已經發表或撰寫過的研究成果,如果引用則標識出了出處。對本課程設計的研究做出貢獻的個人和集體,均已在文中以明確方式標明。課程設計與資料若有不實之處,本人承擔一切相關責任。特此聲明。簽名:年月日
目錄1課程設計任務與要求 31.1課程設計目的 31.1.1問題描述 41.1.2詳細要求 41.2問題分析 42概要設計 52.1總體設計思想 52.2系統功能設計 62.3模塊函數構造 63詳細設計 73.1抽象數據類型定義 73.2主函數設計 73.3查找算法設計 83.4排序算法設計 94課程設計總結 115.1該課程設計的特點 115.2存在的不足 115.3心得體會 11參考文獻 11簡單的職工管理系統1課程設計任務與要求1.1課程設計目的《數據結構》是計算機專業一門重要的專業技術基礎課程。本課程較系統地介紹了軟件設計中常用的數據結構以及相應的存儲結構和實現算法,介紹了常用的多種查找和排序技術。本課程將為整個專業的學習以及軟件設計水平的提高打下良好的基礎。為了學好《數據結構》,必須掌握編寫一些在特定數據結構上的算法,并通過上機調試,更好地掌握各種數據結構及其特點,此次《數據結構》課程設計目的正在于此。經過本次課程設計,我們對于數據結構基本理論和存儲結構及算法設計將有更加深入的理解,并提高我們在實際設計操作中系統分析、結構確定、算法選擇、數學建模和信息加工的能力,提高我們的C/C++語言程序設計能力,以及培養學我們編寫程序設計文檔的能力。1.1.1問題描述根據題目要求,由于職工信息是存放在文件中,所以應提供文件的輸入、輸出等操作;在程序中需要瀏覽職工的信息,應提供顯示、查找、排序等操作;另外還應提供鍵盤式選擇菜單實現功能選擇。1.1.2詳細要求(1)問題說明設計一個簡單的職工管理系統,按照課程設計的要求,實現對職工信息的新增、修改、插入、刪除、以及排序操作。(2)輸入要求由系統管理員依次輸入現有職工和新增職工的以下信息:姓名(可以重復)、性別、出生年月、工作年月、學歷、職務、地址、電話等信息,并且注意輸入時姓名、學歷、職務、地址為字符串形式,性別為字符,其余的為長整型數字。(3)輸出要求系統管理員根據公司的人員流動情況,選擇系統提供的各項功能進行操作,并輸出相應的結果。1.2問題分析(1)具體要求簡單的職工管理系統主要實現以下功能:=1\*GB3①新增一名職工:將新增職工對象按姓名以字典方式職工管理文件中。=2\*GB3②刪除一名職工:從職工管理文件中刪除一名職工對象。=3\*GB3③查詢:從職工管理文件中查詢符合某些條件的職工。=4\*GB3④修改:檢索某個職工對象,對其某些屬性進行修改。=5\*GB3⑤排序:按某種需要對職工對象文件進行排序。要求:職工信息包括姓名、性別、出生年月、工作年月、學歷、職務、住址、電話等信息。(2)實現提示:=1\*GB3①由鍵盤輸入職工對象,以文件方式保存。程序執行時先將文件讀入內存。=2\*GB3②對職工對象中的"姓名"按字典順序進行排序。=3\*GB3③對排序后的職工對象進行增、刪、查詢、修改、排序等操作。2概要設計2.1總體設計思想根據職工管理系統問題的描述和詳細需求分析,要達到上述功能,鏈表的數據結構來存儲職工信息,并對其進行相應的插入、刪除、修改、查詢、排序、保存等操作。(1)輸入功能的實現:要想實現職工管理系統的輸入,必須要建立一個職工信息系統的抽象數據類型,其中職工信息以鏈表的存儲方式實現。(2)系統處理功能的實現:系統管理員根據公司的人員流動情況,在提示信息的提示下,選擇相應的服務進行操作。(3)輸出的實現:根據選擇的操作,輸出與之對應的信息。綜上可以繪制出職工管理問題的系統流程圖,如圖所示2.2系統功能設計根據職工管理系統問題的分析和設計要求,可以得到該職工管理系統可以分為五個模塊:職工信息添加模塊、職工信息修改模塊、職工信息刪除模塊、職工信息查詢模塊、職工信息排序模塊。其系統功能結構如圖所示。2.3模塊函數構造根據系統功能結構圖的描述,可以構造出該系統的抽象數據類型和相對應的函數,其方法名和功能如表1所示。表1函數功能表模塊函數或數據結構功能鏈表數據類型typedefstructNode定義鏈表結點typedefstructDatatype定義職工信息ListInitiate(SLNode**head)初始化鏈表系統處理模塊SLNode*ListInsert(SLNode*head,DataTypex)插入職工信息ListDelete(SLNode*head)刪除職工信息ListModify(SLNode*head)修改職工信息bc(SLNode*head,FILE*fp)保存職工信息Listfind(SLNodehead)查詢職工信息Listpaixu(SLNode*head)職工信息排序輸出模塊print(SLNode*head)顯示職工信息3詳細設計3.1抽象數據類型定義(1)定義表結點(typedefstructNode)typedefstructNode{ longintborn_time,work_time,tele_num; charsex,name[ALLMAX],degree[ALLMAX],job[ALLMAX],address[ALLMAX]; structNode*next;}SLNode;(2)定義職工信息(typedefstructDatatype)typedefstruct{ longintborn_time,work_time,tele_num; charname[ALLMAX],sex,degree[ALLMAX],job[ALLMAX],address[ALLMAX];}DataType;(3)初始化鏈表(ListInitiate(SLNode**head))voidListInitiate(SLNode**head)//鏈表初始化{ if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);//動態分配存儲空間 (*head)->next=NULL;}3.2主函數設計根據詳細設計要求,可以得到主函數代碼及其對應的程序流程圖:在主函數中,實現了友好的界面設計。系統需要輸入職工的基本信息:姓名、性別、出生年月、工作年月、學歷、職務、住址、電話等。這個系統還利用鍵盤輸入提供的主菜單服務,在主菜單中,有七種操作的調用:新增職工信息:SLNode*ListInsert(SLNode*head,DataTypex)查詢職工信息:Listfind(SLNodehead)刪除職工信息:ListDelete(SLNode*head)修改職工信息:ListModify(SLNode*head)職工信息排序:Listpaixu(SLNode*head)保存職工信息:bc(SLNode*head,FILE*fp)顯示職工信息:print(SLNode*head)主函數代碼見附錄1主函數程序流程圖如圖所示:3.3查找算法設計在查詢算法中,職工管理系統提供了七種查詢操作,實現了系統的人性化查詢操作。這些查詢操作分別為:對姓名進行查詢,對性別進行查詢,對出生年月進行查詢,對工作年月進行查詢,對學歷進行查詢,對職位進行查詢,對住址進行查詢,對電話進行查詢等一些列操作。查找算法中,利用鏈表的指針的移動掃描整個職工信息表,利用strcmp()函數判斷字符串是否匹配。查詢算法程序流程圖如圖所示:3.4排序算法設計在排序算法中,職工管理系統提供了四種查詢操作,實現了系統的基本排序操作。這些排序操作分別為:對姓名進行排序,對性別進行排序,對出生年月進行排序,對工作年月進行排序,等一些列操作。排序算法中,利用鏈表的指針的移動掃描整個職工信息表,利用strcmp()函數判斷字符串是否匹配。排序的核心代碼:for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next) { if(p->born_time>q->born_time)//對出生年月進行排序 { if(head==p) { head->next=q->next; head=q; q->next=p; q=head->next; p=head; } else { p->next=q->next; q->next=p; s->next=q; p=q; q=p->next; } flag=1; } }排序算法流程圖如圖所示:4課程設計總結5.1該課程設計的特點本次課程設計是圍繞數據結構進行。根據問題描述可知,需要解決問題并不復雜,整個問題只需要實現一個職工管理系統功能,那就是在這個系統中實現對職工信息的插入、刪除、查詢、排序、修改以及保存。但是,為了實現該功能,卻需要優秀的算法和數據結構以保證實現的時間和空間效率。把職工信息存儲在一個單鏈表中,利用指針實現對職工信息的各項基本操作。5.2存在的不足雖然設計的程序完成了題目描述所需要實現的功能,但是仍然存在不盡人意的地方。那就是可以再排序上面多設計幾個算法。實現多角度排序。在這個系統中沒有職工序號的信息,所以允許職工姓名相同,在很大程度上面,可能是的職工信息重復。5.3心得體會經過這次數據結構課程設計,我們不僅及時鞏固的了數據結構、算法、以及軟件工程的知識,并對數據結構和算法的配合對于程序時間和空間性能的影響以及軟件工程提供的開發流程和工具對于實現特定功能程序的重要意義。當我們面對一個實際問題,應該迅速根據問題性質和特點抽象成特定的數據結構,當然每個問題都有可能能夠抽象成多種數據結構,每種數據結構適應于不同的算法,例如,馬踏棋盤問題就可以采用廣度優先搜索或深度優先搜索來解決。因此此時就應該綜合考慮這樣的數據結構、算法以及它們的空間和時間效率,然后從中選擇一個作為實現程序的基礎。此外,對程序的測試應該要仔細,根據模塊的特點和測試階段,采用各種軟件測試方法對程序進行測試,確保各個模塊的正確性和完整性,最后集成起來測試其是否正確和完整地實現了問題描述中要求的功能。參考文獻[1]嚴蔚敏,吳偉民.數據結構(C語言版)[M].清華大學出版社,2002.9附源代碼#include<stdio.h>#include<string.h>#include<malloc.h>#include<stdlib.h>#defineMAX100typedefstructNode{ longintborn_time,work_time,tele_num; charsex[MAX],name[MAX],degree[MAX],job[MAX],address[MAX]; structNode*next;}SLNode;typedefstruct{ longintborn_time,work_time,tele_num; charname[MAX],sex[MAX],degree[MAX],job[MAX],address[MAX];}DataType;voidListInitiate(SLNode**head){ if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1); (*head)->next=NULL;}voidbc(SLNode*head,FILE*fp){ SLNode*p; if((fp=fopen("職工名單.txt","w"))==NULL){// printf("無法打開'職工名單.txt'!\n"); exit(0); } for(p=head->next;p;p=p->next) { fprintf(fp,"%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } if(fclose(fp)) { printf("無法關閉'職工名單.txt'!\n");exit(0); }}SLNode*ListInsert(SLNode*head,DataTypex){ SLNode*p,*q,*s; p=head->next; if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1); q->born_time=x.born_time;q->work_time=x.work_time; q->tele_num=x.tele_num;strcpy(q->name,); strcpy(q->sex,x.sex);strcpy(q->degree,x.degree); strcpy(q->job,x.job);strcpy(q->address,x.address); if(head->next==NULL){ head->next=q; head->next->next=NULL; } else{ for(;p;p=p->next){ if(p->next!=NULL){ if(strcmp(p->name,)<0&&strcmp(p->next->name,)>0){ s=p->next; p->next=q; q->next=s; break; } elseif(strcmp(p->name,)==0)break; } elseif(strcmp(p->name,)<0&&p->next==NULL){ p->next=q; q->next=NULL; break; } if(strcmp(p->name,)>0){ s=head->next; head->next=q; q->next=s; break; } } } returnhead;}voidListDelete(SLNode*head){ SLNode*p,*s; charx[20]; s=head; p=head->next; if(head->next==NULL){ printf("名單中無職工信息,無須刪除!\n"); return; } printf("請輸入要刪除職工的姓名:\n"); scanf("%s",x); for(p;p;p=p->next){ if(strcmp(p->name,x)==0){ s->next=p->next; free(p); printf("刪除成功!請繼續操作!\n"); break; } s=p; } if(p==NULL){ printf("名單中無職工信息,無須刪除!\n"); }}voidListModify(SLNode*head){ DataTypex; SLNode*p; p=head->next; if(p==NULL){ printf("職工名單無職工信息,無須修改!\n"); return; } printf("請輸入要修改的職工姓名:\n"); scanf("%s",); printf("依次寫入該職工的新信息:\n"); for(;p;p=p->next) { if(strcmp(,p->name)==0){ scanf("%s%s%d%d%s%s%s%d",p->name,p->sex,&p->born_time,&p->work_time,p->degree,p->job,p->address,&p->tele_num); printf("修改成功!請繼續操作!\n"); break; } } if(p==NULL) printf("此職工不存在,無法修改其信息!\n"); }voidListfind(SLNodehead){ inti,j; SLNode*p; DataTypex; if(head.next==NULL){ printf("名單中無職工信息,無法查詢!\n"); return; } printf("\n"); printf("\t*********************************\n"); printf("\t*職工信息查詢操作*\n"); printf("\t**\n"); printf("\t*0.退出查詢系統,回到主菜單\t\t1.對姓名進行查詢\t*\n\t*2.對出生年月進行查詢\t\t3.對學歷進行查詢\t*\n\t*4.對工作年月進行查詢\t\t5.對職務進行查詢\t*\n\t*6.對住址進行查詢\t\t7.對電話進行查詢\t*\n");printf("\t*********************************\n"); printf("請輸入您要選擇的操作:"); scanf("%d",&i); switch(i) { case0:break; case1: p=head.next; printf("請輸入姓名:"); scanf("%s",); j=0; for(p;p;p=p->next){ if(strcmp(p->name,)==0){ ++j; printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } } if(j==0) printf("職工名單中不存在此人!\n"); elseprintf("查詢成功!請繼續操作!\n"); break; case2: p=head.next; printf("請輸入出生年月:"); scanf("%d",&x.born_time); j=0; for(p;p;p=p->next){ if(p->born_time==x.born_time){ ++j; printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } } if(j==0) printf("職工名單中沒有這個時間出生的!\n"); elseprintf("查詢成功!請繼續操作!\n"); break; case3: p=head.next; printf("請輸入學歷:"); scanf("%s",x.degree); j=0; for(p;p;p=p->next){ if(strcmp(p->degree,x.degree)==0){ ++j; printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } } if(j==0) printf("職工名單中沒有這種學歷的!\n"); elseprintf("查詢成功!請繼續操作!\n"); break; case4: p=head.next; printf("請輸入工作年月:"); scanf("%d",&x.work_time); j=0; for(p;p;p=p->next){ if(p->work_time==x.work_time){ ++j; printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } } if(j==0) printf("職工名單中沒有這個時間工作的!\n"); elseprintf("查詢成功!請繼續操作!\n"); break; case5: p=head.next; printf("請輸入職務:"); scanf("%s",x.job); j=0; for(p;p;p=p->next){ if(strcmp(p->job,x.job)==0){ ++j; printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } } if(j==0) printf("職工名單中沒有這種職務的!\n"); elseprintf("查詢成功!請繼續操作!\n"); break; case6: p=head.next; printf("請輸入住址:"); scanf("%s",x.address); j=0; for(p;p;p=p->next){ if(strcmp(p->address,x.address)==0){ ++j; printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } } if(j==0) printf("職工名單中沒有住這的!\n"); elseprintf("查詢成功!請繼續操作!\n"); break; case7: p=head.next; printf("請輸入電話:"); scanf("%d",&x.tele_num); j=0; for(p;p;p=p->next) { if(p->tele_num==x.tele_num) { ++j; printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num); } } if(j==0) printf("職工名單中沒人用這個號碼!\n"); elseprintf("查詢成功!請繼續操作!\n"); break; default: printf("輸入出錯!請再次輸入!\n"); } }voidprint(SLNode*head){ for(SLNode*p=head->next;p;p=p->next) printf("%s%s%d%d%s%s%s%d\n",p->name,p->sex,p->born_time,p->work_time,p->degree,p->job,p->address,p->tele_num);}voidListpaixu(SLNode*head){ inti,n=0,m,flag=1; SLNode*p,*q,*s; if(head->next==NULL){ printf("名單中無職工信息,無法排序!\n\n"); return; } printf("\t\t~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~\n"); printf("\t\t~.~職工信息排序操作~.~\n"); printf("\t\t~.~~.~\n");printf("\t\t~.~\t0.退出排序系統,回到主菜單~.~\n\t\t~.~\t1.對性別進行排序~.~\n\t\t~.~\t2.對出生年月進行排序~.~\n\t\t~.~\t3.對工作年月進行排序~.~\n\t\t~.~\t4.對姓名進行排序~.~\n"); printf("\t\t~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~\n"); while(1) { printf("請輸入您要選擇的操作:"); scanf("%d",&i); if(i==0) break; elseif(i==1){ n=0,m,flag=1; for(p=head;NULL!=p;p=p->next) n++; for(m=1;flag&&m<=n;m++) { flag=0; for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next) { if(p->sex>q->sex) { if(head==p) { head->next=q->next; head=q; q->next=p; q=head->next; p=head; } else { p->next=q->next; q->next=p; s->next=q; p=q; q=p->next; } flag=1; } } } printf("排好序的信息如下:\n姓名\t性別\t出生年月\t工作年月\t學歷\t職位\t住址\t電話\n"); print(head); return; } elseif(i==2){ n=0,m,flag=1; for(p=head;NULL!=p;p=p->next) n++; for(m=1;flag&&m<=n;n++) { flag=0; for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next) { if(p->born_time>q->born_time) { if(head==p) { head->next=q->next; head=q; q->next=p; q=head->next; p=head; } else { p->next=q->next; q->next=p; s->next=q; p=q; q=p->next; } flag=1; } } } printf("排好序的信息如下:\n姓名\t性別\t出生年月\t工作年月\t學歷\t職位\t住址\t電話\n"); print(head); return; } elseif(i==3){ n=0,m,flag=1; for(p=head;NULL!=p;p=p->next) n++; for(m=1;flag&&m<=n;n++) { flag=0; for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next){ if(p->work_time>q->work_time){ if(head==p){ head->next=q->next; head=q; q->next=p; q=head->next; p=head; } else{ p->next=q->next; q->next=p; s->next=q; p=q; q=p->next; } flag=1; } } } printf("排好序的信息如下:\n姓名\t性別\t出生年月\t工作年月\t學歷\t職位\t住址\t電話\n"); print(head); return; } elseif(i==4) { printf("排好序的信息如下:\n姓名\t性別\t出生年月\t工作年月\t學歷\t職位\t住址\t電話\n"); print(head); } elseif(i!=0&&i!=1&&i!=2&&i!=3&&i!=4) printf("輸入出錯!請再次輸入!\n\n");}}voidmenu(){ printf("\t★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★☆☆★\n"); printf("\t☆*主菜單*☆\n");printf("\t★**********★\n"); printf("\t☆☆\n"); printf("\t★0.結束管理系統\t\t\t\t1.新增職工信息\t★\n\t☆2.刪除職工信息\t\t\t\t3.查詢職工信息\t☆\n\t★4.修改職工信息\t\t\t\t5.職工信息排序\t★\n"); printf("\t☆☆\n");printf("\t★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★★☆☆★☆☆★☆☆★☆☆★\n");}/*SLNode*load(SLNode*head){ DataTypea; SLNode*p,*end; FILE*fp; if((fp=fopen("職工名單.txt","rb"))==NULL) { printf("\t無法打開'職工名單.txt'!\n"); returnhead; } p=(SLNode*)malloc(sizeof(SLNode)); p=head; p->next=NULL; if(head==0){printf("文件內沒有數據!");returnhead;} else { while(head!=0) {end=(SLNode*)malloc(sizeof(SLNode)); p->next=end; p=end; p->next=NULL; f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店客房培訓
- 2025合同范本:商鋪租賃合同協議書
- 2025年版權保留轉讓合同
- 護理培訓成果匯報
- 2025商業店鋪租賃合同范本2
- 2025租賃合同的擔保方式
- 2025網約車租賃服務合同
- 2025勞動合同范本標準模板
- 2025標準設備購買合同參考范本
- 2025合作伙伴合同書 企業合作伙伴合同撰寫
- 企業重組相關稅收政策培訓教學課件(38張)
- midas NFX使用指南(八)
- 肝癌的防治(大眾科普版本)-PPT課件
- 成都高新區小學數學五年級下冊半期考試數學試卷
- 職業危害防治實施管理臺賬
- 2018年人教版九年級英語單詞表
- 畢業設計U型管換熱器設計說明書
- 蘋果中國授權經銷商協議
- KGW船用起重機維護使用手冊
- 怎樣確保騎車安全-1
- 混凝土裂縫修補工程驗收記錄表
評論
0/150
提交評論