




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
資料內(nèi)容僅供您學習參考,如有不當或者侵權(quán),請聯(lián)系改正或者刪除。福建工程學院實驗報告專業(yè)計算機科學與技術(shù)班級計算機1001座號姓名日期/5/14福建工程學院計算機與信息科學系實驗報告–年第一學期任課老師:章靜實驗題目日記管理系統(tǒng)的開發(fā)實驗時間實驗開始日期:\05\03
報告提交日期:\05\14實驗?zāi)康?、要求一、實驗題目:設(shè)計一個簡單實用個人日記管理系統(tǒng)。二、實驗要求1.該實驗的課內(nèi)學時是4個課時。2.程序完成后應(yīng)該完成如下基本功能:1)用自定義日記的存儲結(jié)構(gòu),每篇日記至少包含日期,內(nèi)容等字段;2)使用者必須輸入密碼;3)寫日記與保存功能;4)日記查閱:按日期查看,按關(guān)鍵字查看,按順序查看功能(從某一篇開始)3.在完成上述基本功能的前提下,有能力的同學能夠完成如下加強功能:1)實現(xiàn)日記的永久存儲。2)對保存的密碼進行變換,以免泄密。3)允許多人使用。4)在程序的提示語言清晰明確,界面美觀而且適用。實驗設(shè)計內(nèi)容(1)實驗設(shè)計的數(shù)據(jù)結(jié)構(gòu)/*定義日記結(jié)點類型*/typedefstructDiary{chardate[15];/*日期*/chartitle[20];/*日記標題*/intflag;/*判斷日記是否符合查閱要求,是為0,否為-1*/structDiary*next;}Diary;/*定義用戶結(jié)點類型*/typedefstructUser{charname[20];/*用戶名*/charpassword[20];/*登錄密碼*/intcount;/*該用戶擁有的日志的個數(shù)*/Diary*first;/*指向用戶擁有的日記鏈表的表頭*/structUser*next;}*Us,User;最后的用戶信息以及在該用戶目錄下的日志信息以二進制的形式存在文件中。(2)總體函數(shù)模塊結(jié)構(gòu)圖:初始化用戶、日志信息讀取密碼修改日志管理系統(tǒng)初始化用戶、日志信息讀取密碼修改日志管理系統(tǒng)用戶登陸和注冊寫入日記日記查詢?nèi)沼泟h除用戶、日記信息保存按順序查詢按日期查詢按照關(guān)鍵字查詢(3)重點函數(shù)分析1.初始化函數(shù):程序運行會運行此函數(shù),講已有的用戶信息和她們的日志信息讀入鏈表中。UsInit(){FILE*fp1,*fp2;UsL=NULL;User*p;Diary*s;if((fp1=fopen("Userlist.txt","r+"))==NULL)returnL;while(!feof(fp1)){p=(User*)malloc(sizeof(User));if(fread(p,sizeof(User),1,fp1)!=1)break;//從一個流中讀取數(shù)據(jù)(接受數(shù)據(jù)的指針,單個元素的大小,元素個數(shù),提供數(shù)據(jù)的文件指針)p->first=NULL;//讀取系統(tǒng)已有的用戶信息p->next=L;L=p;chdir(p->name);//把相應(yīng)用戶目錄作為當前工作目錄if((fp2=fopen("dairylist.txt","r"))==NULL){continue;}elsewhile(!feof(fp2)){s=(Diary*)malloc(sizeof(Diary));//讀取系統(tǒng)相應(yīng)用戶的相應(yīng)日記信息if(fread(s,sizeof(Diary),1,fp2)!=1)break;s->next=L->first;//first為該用戶的節(jié)點擁有的日志鏈表L->first=s;}fclose(fp2);//關(guān)閉存儲日志信息的文件,把父目錄作為當前工作目錄}fclose(fp1);return(L);}2.登錄結(jié)構(gòu)流程圖:開始開始輸入用戶名及其對應(yīng)密碼輸入用戶名及其對應(yīng)密碼NNYY進入日志操作界面判斷輸入的用戶名和密碼鏈表中是否存在代碼:/*用戶登錄函數(shù)*/voidLogin(UsL){chartemp[20];charflag;inti,j,count;User*p;Diary*s;p=L;system("cls");printf("\n\t\t\t|^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\t\t\t|\t用戶登入\t|\n");printf("\t\t\t|^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\n\t已有的用戶名:\n");printf("\t\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\t\t|\t序號\t用戶名\t\t|\n");count=1;while(p!=NULL)//將已經(jīng)有的用戶名和對應(yīng)序號打印出來{printf("\t\t|\t%d\t%s\t\t|\n",count,p->name);p=p->next;count++;}printf("\t\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");count--;printf("\n\n\t輸入序號:\t\t");i=Input_Integer();//這樣我們在選擇序號時輸入字符也不會造成死循環(huán)while(i>count||i==-1){printf("\n\n\t輸入序號錯誤");printf("\n\t是否繼續(xù)進行輸入:(YorN)");scanf("%c",&flag);if(flag=='N'||flag=='n')return;printf("\n\n\t輸入序號:\t\t");scanf("%d",&i);}j=1;p=L;while(j<i){j++;p=p->next;}printf("\n\t你選擇的用戶:\t\t%s",p->name);printf("\n\t輸入密碼:\t\t");Password_input(temp);//輸入密碼Express_chage_dark(temp);//明碼轉(zhuǎn)化為暗碼,以跟以保存的用戶密碼比較while(strcmp(p->password,temp)!=0){printf("\n\t輸入的密碼錯誤!!!\n");printf("\n\t是否繼續(xù)輸入:(YorN)\t");scanf("%c",&flag);if(flag=='N'||flag=='n')return;printf("\n\t輸入密碼:\t\t");Password_input(temp);Express_chage_dark(temp);}printf("\n\n\t\t\t登入中,請稍等.....");system("cls");User_Operate(p,L);//用戶登入后,進行用戶操作}3.用戶注冊:結(jié)構(gòu)流程圖:YYNNY開始輸入要注冊的用戶名檢查該用戶是否已經(jīng)存在輸入密碼(密碼確認)注冊成功兩次輸入密碼相同代碼:/*新用戶申請函數(shù)*/UsUser_apply(UsL){chartemp1[20];chartemp2[20];inti;charflag;User*p;User*s;rewind(stdin);s=(User*)malloc(sizeof(User));system("cls");printf("\n\t\t\t|^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\t\t\t|\t申請用戶\t|\n");printf("\t\t\t|^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\n\t已有的用戶名:\n");p=L;while(p!=NULL){printf("\t\t\t%s\n",p->name);p=p->next;//輸出系統(tǒng)已存在的用戶名,以讓用戶申請新用戶時,有個注意,不申請重復(fù)的用戶名}p=L;printf("\n\n\t輸入用戶名:\t\t");scanf("%s",s->name);rewind(stdin);while(p!=NULL&&strcmp(p->name,s->name)!=0)p=p->next;//判斷有沒有重復(fù)的用戶名while(p!=NULL){printf("\n\t該用戶名已經(jīng)存在!!!!!\n");printf("\n\t是否繼續(xù)進行申請用戶:(YorN)");scanf("%c",&flag);if(flag=='N'||flag=='n'){free(s);returnL;}printf("\t輸入用戶名:\t");scanf("%s",s->name);rewind(stdin);p=L;while(p!=NULL&&strcmp(p->name,s->name)!=0)p=p->next;}printf("\n\t\t\t該用戶名能夠使用\n");printf("\n\t輸入密碼:\t\t");Password_input(temp1);printf("\n\t確認密碼:\t\t");Password_input(temp2);while(strcmp(temp1,temp2)!=0){printf("\n\t兩次輸入的密碼不一致!!!\n");printf("\n\t輸入密碼:\t\t");Password_input(temp1);printf("\n\t確認密碼:\t\t");Password_input(temp2);}strcpy(s->password,temp1);s->first=NULL;s->count=0;//申請好用戶,mkdir(s->name);//生成相應(yīng)用戶對應(yīng)的文件夾,文件夾里用來存儲相應(yīng)用戶的相應(yīng)日記Express_chage_dark(s->password);//進行密碼家秘密s->next=L;L=s;Save_user(L);getchar();//每添加一個用戶時,都要進行存儲用戶信息的保存printf("\n\t\t申請中,請稍等.....");printf("\n\n\t\t\t申請成功!\n\n\t");getchar();return(L);}4.寫日志操作:說明:在次用戶登陸后,打開文件,直接找到該用戶目錄下的日志表單,將寫入的日志直接寫到這個人的用戶的文件夾中,日志具體內(nèi)容并不是保存在鏈表中的,由于考錄到日志內(nèi)容可能會很長,這樣能夠節(jié)省空間。函數(shù)結(jié)構(gòu)流程圖:開始開始輸入日記內(nèi)容、日記名、日記時間打開文件fp=fopen講日記內(nèi)容寫入到文件中保存更新后的用戶信息和日志信息鏈表代碼:/*寫日記*/voidWrite_dairy(User*H,UsL){intchoice;chartemp[200];//用于存儲寫入的日記FILE*fp;Diary*s;inti;printf("\n\n\t輸入日記內(nèi)容:\n\n\t\t");scanf("%s",temp);getchar();rewind(stdin);Express_chage_dark(temp);//對日記內(nèi)容加密s=(Diary*)malloc(sizeof(Diary));//為保存日志的節(jié)點動態(tài)申請空間printf("\n\n\t輸入要保存的日記名:\t");scanf("%s",s->title);getchar();rewind(stdin);while(Search_dairy(H,s->title)!=1){printf("\n\t該日記名已經(jīng)存在,請重新輸入!!!!");printf("\n\t重新輸入要保存的日記名:\t");scanf("%s",s->title);getchar();}printf("\n\t\t該日記名能夠使用");printf("\n\t輸入日期時間:(\\05\\01)\t");scanf("%s",s->date);getchar();rewind(stdin);s->flag=0;chdir(H->name);//把相應(yīng)用戶目錄作為當前工作的目錄(因為日志信息是直接放在文件中的,每次對日志內(nèi)容添加、修改是都要先打開文件)if((fp=fopen(s->title,"w"))==NULL){printf("對不起,不能打開文件!!!");return;}i=0;printf("\n\t保存中,請稍等.....");while(temp[i]!='\0'){fwrite(temp+i,1,1,fp);//將信息寫入文件流中(要輸出數(shù)據(jù)的地址,要讀寫的字節(jié)數(shù),要讀寫的字節(jié)數(shù)據(jù)的個數(shù),文件類型的指針)i=i+1;}s->next=H->first;//頭插法,新寫的日志排在最前面H->first=s;H->count++;fclose(fp);Save_dairy(H);//保存相應(yīng)用戶的日記信息Save_user(L);//保存用戶信息,因為此時用戶的count已經(jīng)改變了,需要保存printf("\n\n\t保存完畢!\n\n\t");}4.查閱日記操作函數(shù)流程圖:開始開始按順序查詢選擇查詢方式按關(guān)鍵字查詢按日期查詢輸出日記返回代碼:/*查閱日記*/voidConsult_dairy(User*H,inti){Diary*p;FILE*fp;chartemp[200];intj;intflag=0;//先進行遍遍歷,若有找到符合條件的日志則做標記p=H->first;if(i==-1)//進行順序查詢{printf("\n\n\t請輸入要順序查看的日記序號:\t");scanf("%d",&j);if(j<=H->count){while(j>1){p=p->next;j--;}p->flag=-1;//找到符合條件日記,對應(yīng)結(jié)點的flag賦為-1,以便待會篩選出來flag=1;//在此用戶的日志鏈表中有找到過符合條件的日志}}else{if(i==0)printf("\n\t輸入要查詢的日期:\t");//進行日期查詢if(i==15)printf("\n\t輸入要查詢的關(guān)鍵字:\t");//進行關(guān)鍵字查詢scanf("%s",temp);rewind(stdin);while(p!=NULL){if(strstr((p->date+i),temp)!=NULL)//分配的空間是連續(xù)的{p->flag=-1;//找到符合條件的結(jié)點,其flag賦予-1,以便待會篩選出來flag=1;//在此用戶的日志鏈表中有找到過符合條件的日志}p=p->next;}}if(flag==0)printf("\n\t\t對不起,找不到所需要的日記");else{p=H->first;printf("\n\t要查看的日記如下\n");chdir(H->name);//把相應(yīng)用戶的目錄弄為當前工作目錄(要對文件進行操作)while(p!=NULL){if(p->flag==-1)//先前找到的符合條件的日子打印出來{printf("\n\t—————————————————————————————————\n");printf("\t\t日記名:%s\t\t時間%s\n",p->title,p->date);p->flag=0;//篩選輸出結(jié)點的flag為-1的日記名,日期Read_dairy(p->title);}p=p->next;}}printf("\n\n\t\t");}5.刪除用戶日記函數(shù)流程圖:
代碼:/*刪除用戶日記*/voidDelete_dairy(User*H,UsL){Diary*p;//指向要刪除的結(jié)點Diary*pre;//指向要刪除的結(jié)點的前驅(qū)結(jié)點inti,j;charflag;printf("\n\n\t請輸入要刪除的日記序號:\t\t");scanf("%d",&i);rewind(stdin);j=i;p=H->first;//先找到要進行刪除的結(jié)點if(j<=H->count)//先判斷一下輸入的藥刪除日志的編號是否小于該用戶擁有的總?cè)罩镜膫€數(shù){while(i>1){p=p->next;i--;}p->flag=-1;//要刪除的結(jié)點的flag標識符設(shè)為-1p=H->first;//再對找到的結(jié)點進行刪除操作while(p!=NULL&&(p->flag==0)){pre=p;p=p->next;}printf("\n\t要刪除的日記是:\n");printf("\t\t序號:%d\t日記名:%s\t時間:%s",j,p->title,p->date);getchar();printf("\n\t是否確認要刪除:(YorN)\t");scanf("%c",&flag);rewind(stdin);if(flag=='Y'||flag=='y'){if(H->first==p)H->first=p->next;//要刪除的結(jié)點為第一結(jié)點時elsepre->next=p->next;//要刪除的結(jié)點不是第一結(jié)點時}elsereturn;chdir(H->name);//把相應(yīng)用戶的目錄弄為當前工作目錄H->count--;//用戶的日記數(shù)減1remove(p->title);//去掉相應(yīng)的文件free(p);//釋放要刪除的結(jié)點空間Save_dairy(H);//保存用戶日記信息,不然原有的用戶日記信息還是不變Save_user(L);//保存用戶信息printf("\n\t刪除中,請稍等.....");printf("\n\n\t刪除成功!!!\n\t");getchar();}else{printf("序號太大\n");}}7.用戶及其擁有的日志信息在文件中的保存/*保存用戶日記信息*/voidSave_dairy(User*H){FILE*fp;Diary*p;chdir(H->name);//把相應(yīng)用戶目錄作為當前工作目錄(用于文件操作)if((fp=fopen("dairylist.txt","w"))==NULL){printf("輸入有誤:不能打開文件!\n");return;}p=H->first;while(p!=NULL){fwrite(p,sizeof(Diary),1,fp);//將信息寫入文件流中(要輸出數(shù)據(jù)的地址,要讀寫的字節(jié)數(shù),要讀寫的字節(jié)數(shù)據(jù)的個數(shù),文件類型的指針)p=p->next;}fclose(fp);}/*保存全部用戶日記信息*/voidSave_user(UsL){FILE*fp;User*p;fp=fopen("Userlist.txt","w");p=L;while(p!=NULL){fwrite(p,sizeof(User),1,fp);p=p->next;}fclose(fp);}調(diào)試過程記錄1.while(feof(fp)==0){fwrite(fp,"%c",&temp[i]);i++;}本系實驗主要是考察隊文件的運用,而我一開始對文件這一部分的編程比較陌生,在經(jīng)過看書查閱各種資料后,對其的一些知識有所了解,經(jīng)過實驗中的重復(fù)運用加以熟練。例如經(jīng)過實驗代碼的重復(fù)測試我發(fā)現(xiàn)了:Fwrite寫入的是一個數(shù)據(jù)塊,fscanf一個一個的輸入,這邊只能用fscanf實驗結(jié)果記錄以及與預(yù)期結(jié)果比較以及分析1.主界面2.用戶注冊界面3.用戶操登陸4.登陸后菜單:4.1寫日志功能:4.2查看自己日志:(按順序查找)4.3查看好友日志:(按日期查找)4.4刪除日志:4.5更改密碼:總結(jié)以及心得體會這次實驗綜合考察了鏈表和文件的操作,有一定的復(fù)雜性。在實驗的訓(xùn)練中,一開始拿到題目沒有什么思路主要是不明白日志具體要實現(xiàn)什么功能,然后要實現(xiàn)的這些功能又要用什么樣的函數(shù)來構(gòu)成。然后經(jīng)過查閱有關(guān)資料,看人家的成平的具體結(jié)構(gòu)在思想中有了大致的結(jié)構(gòu)才開始一個功能一個功能的實現(xiàn)的編寫。而日志管理系統(tǒng)的編寫中最主要的就是文件的運用,在這里我的我們用戶所寫的日志并不存在用戶的日志鏈表中,而是直接寫入文件,讀取的時候是經(jīng)過日志的名稱找到那一個日志的文件,然后打開文件直接從文件中讀取并顯示出來。這樣么能夠節(jié)省很多的空間,因為用戶的日志的長度有長有短,如果日志的內(nèi)容頁存在日志的鏈表中會真用很大空間,造成浪費現(xiàn)象,而且用戶輸入的日志長度還會有所限制??紤]到這些,就采用直接將用戶的日志內(nèi)容存在文件中的方法了??傊?在日志系統(tǒng)的編寫中,不但對鏈表的使用更加熟練也加強了文件這一部分的運用。同時也十分感謝老師在實驗過程中給予的耐心指導(dǎo)。指導(dǎo)老師評閱意見指導(dǎo)老師:年月日整體代碼:/*日記管理系統(tǒng)*/#include<stdio.h>#include<math.h>#include<string.h>#include<stdlib.h>#defineEnter13//回車鍵/*定義日記結(jié)點類型*/typedefstructDiary{chardate[15];/*日期*/chartitle[20];/*日記標題*/intflag;/*判斷日記是否符合查閱要求,是為0,否為-1*/structDiary*next;}Diary;/*定義用戶結(jié)點類型*/typedefstructUser{charname[20];/*用戶名*/charpassword[20];/*登錄密碼*/intcount;/*該用戶擁有的日志的個數(shù)*/Diary*first;/*指向用戶擁有的日記鏈表的表頭*/structUser*next;}*Us,User;/*函數(shù)原型*/UsInit();/*初始化函數(shù)*/voidmain_menu(UsL);voidHelp();/*幫助使用函數(shù)*/UsUser_apply(UsL);/*新用戶申請函數(shù)*/voidSave_user(UsL);/*保存所有用戶信息*/voidLogin(UsL);/*用戶密碼登錄函數(shù)*/intInput_Integer();/*整數(shù)控制函數(shù)*/voidExpress_chage_dark(chartemp[]);/*明文轉(zhuǎn)化為密文*/voidDark_chage_express(chartemp[]);/*密文轉(zhuǎn)化為明文*/voidUser_Operate(User*H,UsL);intSearch_dairy(User*H,chartemp[]);/*查找是否有同名日記操作*/voidWrite_dairy(User*H,UsL);voidSave_dairy(User*H);/*保存用戶日記信息*/voidRejigger_user_password(User*H,UsL);/*修改用戶密碼*/voidRead_dairy(chartitle[]);/*讀日記*/voidPassword_input(chartemp[]);voidDelete_dairy(User*H,UsL);voidConsult_dairy_meno(User*H);/*查閱日記菜單*/voidConsult_dairy(User*H,inti);Usfindfriend(UsL);intmain(){UsL;begin();main_menu(L);}/*初始化函數(shù)*/UsInit(){FILE*fp1,*fp2;UsL=NULL;User*p;Diary*s;if((fp1=fopen("Userlist.txt","r+"))==NULL)returnL;while(!feof(fp1)){p=(User*)malloc(sizeof(User));if(fread(p,sizeof(User),1,fp1)!=1)break;//從一個流中讀取數(shù)據(jù)(接受數(shù)據(jù)的指針,單個元素的大小,元素個數(shù),提供數(shù)據(jù)的文件指針)p->first=NULL;//讀取系統(tǒng)已有的用戶信息p->next=L;L=p;chdir(p->name);//把相應(yīng)用戶目錄作為當前工作目錄if((fp2=fopen("dairylist.txt","r"))==NULL){continue;}elsewhile(!feof(fp2)){s=(Diary*)malloc(sizeof(Diary));//讀取系統(tǒng)相應(yīng)用戶的相應(yīng)日記信息if(fread(s,sizeof(Diary),1,fp2)!=1)break;s->next=L->first;//first為該用戶的節(jié)點擁有的日志鏈表L->first=s;}fclose(fp2);//關(guān)閉存儲日志信息的文件,把父目錄作為當前工作目錄}fclose(fp1);return(L);}/*開始函數(shù)*/intbegin(){inti,j;system("colorb");for(i=1;i<=1;i++){printf("\n\n\n\n\n\n\n\t\t\t★★★★★★★★★★★★★★★★★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★歡迎使用日志管理系統(tǒng)★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★設(shè)計者:張夷★\n");printf("\t\t\t★★\n");printf("\t\t\t★日期:.4.28★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★★★★★★★★★★★★★★★★★\n"); printf("\n\t\t\t系統(tǒng)開始啟動.\n"); for(j=1;j<;j++){}system("cls");printf("\n\n\n\n\n\n\n\t\t\t★★★★★★★★★★★★★★★★★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★歡迎使用日志管理系統(tǒng)★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★設(shè)計者:張夷★\n");printf("\t\t\t★★\n");printf("\t\t\t★日期:.4.28★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★★★★★★★★★★★★★★★★★\n"); printf("\n\t\t\t系統(tǒng)開始啟動...\n"); for(j=1;j<;j++){}system("cls");printf("\n\n\n\n\n\n\n\t\t\t★★★★★★★★★★★★★★★★★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★歡迎使用日志管理系統(tǒng)★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★設(shè)計者:張夷★\n");printf("\t\t\t★★\n");printf("\t\t\t★日期:.4.28★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★★★★★★★★★★★★★★★★★\n"); printf("\n\t\t\t系統(tǒng)開始啟動.....\n"); for(j=1;j<;j++){}system("cls");printf("\n\n\n\n\n\n\n\t\t\t★★★★★★★★★★★★★★★★★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★歡迎使用日志管理系統(tǒng)★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★設(shè)計者:張夷★\n");printf("\t\t\t★★\n");printf("\t\t\t★日期:.4.28★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★★★★★★★★★★★★★★★★★\n"); printf("\n\t\t\t系統(tǒng)開始啟動.......\n"); for(j=1;j<;j++){}system("cls");printf("\n\n\n\n\n\n\n\t\t\t★★★★★★★★★★★★★★★★★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★歡迎使用日志管理系統(tǒng)★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★設(shè)計者:張夷★\n");printf("\t\t\t★★\n");printf("\t\t\t★日期:.4.28★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★★★★★★★★★★★★★★★★★\n"); printf("\n\t\t\t系統(tǒng)開始啟動.........\n"); for(j=1;j<;j++){}system("cls");printf("\n\n\n\n\n\n\n\t\t\t★★★★★★★★★★★★★★★★★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★歡迎使用日志管理系統(tǒng)★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★設(shè)計者:張夷★\n");printf("\t\t\t★★\n");printf("\t\t\t★日期:.4.28★\n"); printf("\t\t\t★★\n"); printf("\t\t\t★★★★★★★★★★★★★★★★★\n"); printf("\n\t\t\t系統(tǒng)開始啟動...........\n"); for(j=1;j<;j++){}system("cls");}}voidmain_menu(UsL){inti=0;intselect;L=Init(); printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※\n"); printf("\t\t\t※※\n"); printf("\t\t\t※1.用戶登錄※\n"); printf("\t\t\t※--------------------※\n"); printf("\t\t\t※2.新用戶申請※\n"); printf("\t\t\t※--------------------※\n"); printf("\t\t\t※3.幫助※\n"); printf("\t\t\t※--------------------※\n");printf("\t\t\t※0.退出系統(tǒng)※\n"); printf("\t\t\t※※\n"); printf("\t\t\t※※※※※※※※※※※※\n"); printf("\n\t\t\t請選擇【0-3】:"); scanf("%d",&select);while(select!=0){switch(select){case1:Login(L);break;case2:L=User_apply(L);break;case3:Help();break;}system("cls");printf("\n\n\n\n\n\t\t\t※※※※※※※※※※※※\n"); printf("\t\t\t※※\n"); printf("\t\t\t※1.用戶登錄※\n"); printf("\t\t\t※--------------------※\n"); printf("\t\t\t※2.新用戶申請※\n"); printf("\t\t\t※--------------------※\n"); printf("\t\t\t※3.幫助※\n"); printf("\t\t\t※--------------------※\n");printf("\t\t\t※0.退出系統(tǒng)※\n"); printf("\t\t\t※※\n"); printf("\t\t\t※※※※※※※※※※※※\n"); label: printf("\n\t\t\t請選擇【0-3】:"); scanf("%d",&select);}}/*打開使用系統(tǒng)的幫助文件*/voidHelp(){FILE*fp;system("cls");fp=fopen("help.txt","r");if(fp==NULL){printf("\n\t\t\t無法打開使用系統(tǒng)的幫助文件!");return;}while(feof(fp)==0)printf("%c",fgetc(fp));//從文件中讀取字符fclose(fp);printf("\n\n\t");}/*密碼輸入控制函數(shù)*/voidPassword_input(chartemp[]){inti;i=0;while((temp[i]=getch())!=Enter)//輸入回車鍵退出{if(temp[i]=='\b'&&i>0)//當不是第一個輸入刪除鍵時,進行的操作{rewind(stdin);//printf("\b");printf("");printf("\b\b");i--;continue;}elseif(temp[i]!='\b'&&i>=0)//當不是輸入刪除鍵時,輸出*號{printf("*");i=i+1;}}temp[i]='\0';}/*新用戶申請函數(shù)*/UsUser_apply(UsL){chartemp1[20];chartemp2[20];inti;charflag;User*p;User*s;rewind(stdin);s=(User*)malloc(sizeof(User));system("cls");printf("\n\t\t\t|^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\t\t\t|\t申請用戶\t|\n");printf("\t\t\t|^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\n\t已有的用戶名:\n");p=L;while(p!=NULL){printf("\t\t\t%s\n",p->name);p=p->next;//輸出系統(tǒng)已存在的用戶名,以讓用戶申請新用戶時,有個注意,不申請重復(fù)的用戶名}p=L;printf("\n\n\t輸入用戶名:\t\t");scanf("%s",s->name);rewind(stdin);while(p!=NULL&&strcmp(p->name,s->name)!=0)p=p->next;//判斷有沒有重復(fù)的用戶名while(p!=NULL){printf("\n\t該用戶名已經(jīng)存在!!!!!\n");printf("\n\t是否繼續(xù)進行申請用戶:(YorN)");scanf("%c",&flag);if(flag=='N'||flag=='n'){free(s);returnL;}printf("\t輸入用戶名:\t");scanf("%s",s->name);rewind(stdin);p=L;while(p!=NULL&&strcmp(p->name,s->name)!=0)p=p->next;}printf("\n\t\t\t該用戶名能夠使用\n");printf("\n\t輸入密碼:\t\t");Password_input(temp1);printf("\n\t確認密碼:\t\t");Password_input(temp2);while(strcmp(temp1,temp2)!=0){printf("\n\t兩次輸入的密碼不一致!!!\n");printf("\n\t輸入密碼:\t\t");Password_input(temp1);printf("\n\t確認密碼:\t\t");Password_input(temp2);}strcpy(s->password,temp1);s->first=NULL;s->count=0;//申請好用戶,mkdir(s->name);//生成相應(yīng)用戶對應(yīng)的文件夾,文件夾里用來存儲相應(yīng)用戶的相應(yīng)日記Express_chage_dark(s->password);//進行密碼家秘密s->next=L;L=s;Save_user(L);getchar();//每添加一個用戶時,都要進行存儲用戶信息的保存printf("\n\t\t申請中,請稍等.....");printf("\n\n\t\t\t申請成功!\n\n\t");getchar();return(L);}/*保存用戶日記信息*/voidSave_dairy(User*H){FILE*fp;Diary*p;chdir(H->name);//把相應(yīng)用戶目錄作為當前工作目錄(用于文件操作)if((fp=fopen("dairylist.txt","w"))==NULL){printf("輸入有誤:不能打開文件!\n");return;}p=H->first;while(p!=NULL){fwrite(p,sizeof(Diary),1,fp);//將信息寫入文件流中(要輸出數(shù)據(jù)的地址,要讀寫的字節(jié)數(shù),要讀寫的字節(jié)數(shù)據(jù)的個數(shù),文件類型的指針)p=p->next;}fclose(fp);}/*保存全部用戶日記信息*/voidSave_user(UsL){FILE*fp;User*p;fp=fopen("Userlist.txt","w");p=L;while(p!=NULL){fwrite(p,sizeof(User),1,fp);p=p->next;}fclose(fp);}/*用戶登錄函數(shù)*/voidLogin(UsL){chartemp[20];charflag;inti,j,count;User*p;Diary*s;p=L;system("cls");printf("\n\t\t\t|^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\t\t\t|\t用戶登入\t|\n");printf("\t\t\t|^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\n\t已有的用戶名:\n");printf("\t\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\t\t|\t序號\t用戶名\t\t|\n");count=1;while(p!=NULL)//將已經(jīng)有的用戶名和對應(yīng)序號打印出來{printf("\t\t|\t%d\t%s\t\t|\n",count,p->name);p=p->next;count++;}printf("\t\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");count--;printf("\n\n\t輸入序號:\t\t");i=Input_Integer();//這樣我們在選擇序號時輸入字符也不會造成死循環(huán)while(i>count||i==-1){printf("\n\n\t輸入序號錯誤");printf("\n\t是否繼續(xù)進行輸入:(YorN)");scanf("%c",&flag);if(flag=='N'||flag=='n')return;printf("\n\n\t輸入序號:\t\t");scanf("%d",&i);}j=1;p=L;while(j<i){j++;p=p->next;}printf("\n\t你選擇的用戶:\t\t%s",p->name);printf("\n\t輸入密碼:\t\t");Password_input(temp);//輸入密碼Express_chage_dark(temp);//明碼轉(zhuǎn)化為暗碼,以跟以保存的用戶密碼比較while(strcmp(p->password,temp)!=0){printf("\n\t輸入的密碼錯誤!!!\n");printf("\n\t是否繼續(xù)輸入:(YorN)\t");scanf("%c",&flag);if(flag=='N'||flag=='n')return;printf("\n\t輸入密碼:\t\t");Password_input(temp);Express_chage_dark(temp);}printf("\n\n\t\t\t登入中,請稍等.....");system("cls");User_Operate(p,L);//用戶登入后,進行用戶操作}/*密文轉(zhuǎn)化為明文*/voidDark_chage_express(chartemp[]){inti;i=0;while(temp[i]!='\0'){temp[i]=temp[i]+2;i=i+1;}}/*明文轉(zhuǎn)化為密文*/voidExpress_chage_dark(chartemp[]){inti;i=0;while(temp[i]!='\0'){temp[i]=temp[i]-2;i=i+1;}}/*整數(shù)輸入控制*/intInput_Integer(){charstr[10];longn,i=0;scanf("%s",str);rewind(stdin);while(str[i]!='\0')//對字符串的各個字符進行判斷,直到字符串結(jié)束{if(str[i]<'0'||str[i]>'9')return-1;i++;}n=atoi(str);//利用atoi函數(shù)將字符串str轉(zhuǎn)換成整型數(shù)returnn;//返回輸入的正整數(shù)}/*查找是否有同名日記操作*/intSearch_dairy(User*H,chartemp[]){Diary*p;p=H->first;//讀取用戶結(jié)點中保存的她的日志鏈表while(p!=NULL&&strcmp(p->title,temp)!=0)p=p->next;if(p!=NULL)//如果是有同名日志return0;elsereturn1;}/*相應(yīng)用戶登錄后的操作*/voidUser_Operate(User*H,UsL)//H是結(jié)點,L是鏈表的頭結(jié)點{intchoice;User*m;Diary*p;inti;system("cls");printf("\t\t>>>>———歡迎^%s^的到來———<<<<\n\n",H->name);printf("\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\t|1.寫日記2.查閱日記3.查看好友日志3.刪除日記4.更改用戶密碼0.退出系統(tǒng)|\n");printf("\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\n\t已有的日記:\n");printf("\n\t\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\t\t|\t序號\t日記名\t時間\t|\n");p=H->first;i=1;while(p!=NULL)//輸出該用戶的所有日志{printf("\t\t|\t%d\t%s\t%s\t|\n",i,p->title,p->date);p=p->next;//輸出相應(yīng)用戶的日記名i++;}printf("\t\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\n\n\t請輸入選擇:\t\t");scanf("%d",&choice);while(choice!=0){switch(choice){case1:Write_dairy(H,L);break;//寫日記case2:Consult_dairy_meno(H);break;//查閱日記case3:m=findfriend(L);if(m==NULL)printf("對不起,該好友不存在!");elseConsult_dairy_meno(m);break;break;//查看好友日志case4:Delete_dairy(H,L);break;//刪除日記case5:Rejigger_user_password(H,L);break;//修改用戶}getchar();system("cls");printf("\t\t>>>>———歡迎^%s^的到來———<<<<\n\n",H->name);printf("\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\t|1.寫日記2.查閱日記3.查看好友日志3.刪除日記4.更改用戶密碼0.退出系統(tǒng)|\n");printf("\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\n\t已有的日記:\n");p=H->first;printf("\n\t\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\t\t|\t序號\t日記名\t時間\t|\n");p=H->first;i=1;while(p!=NULL){printf("\t\t|\t%d\t%s\t%s\t|\n",i,p->title,p->date);p=p->next;//輸出相應(yīng)用戶的日記名i++;}printf("\t\t|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|\n");printf("\n\n\t請輸入選擇:\t\t");scanf("%d",&choice);}}/*寫日記*/voidWrite_dairy(User*H,UsL){intchoice;chartemp[200];//用于存儲寫入的日記FILE*fp;Diary*s;inti;printf("\n\n\t輸入日記內(nèi)容:\n\n\t\t");scanf("%s",temp);getchar();rewind(stdin);Express_chage_dark(temp);//對日記內(nèi)容加密s=(Diary*)malloc(sizeof(Diary));//為保存日志的節(jié)點動態(tài)申請空間printf("\n\n\t輸入要保存的日記名:\t");scanf("%s",s->title);getchar();rewind(stdin);while(Search_dairy(H,s->title)!=1){printf("\n\t該日記名已經(jīng)存在,請重新輸入!!!!");printf("\n\t重新輸入要保存的日記名:\t");scanf("%s",s->title);getchar();}printf("\n\t\t該日記名能夠使用");printf("\n\t輸入日期時間:(\\05\\01)\t");scanf("%s",s->date);getchar();rewind(stdin);s->flag=0;chdir(H->name);//把相應(yīng)用戶目錄作為當前工作的目錄(因為日志信息是直接放在文件中的,每次對日志內(nèi)容添加、修改是都要先打開文件)if((fp=fopen(s->title,"w"))==NULL){printf("對不起,不能打開文件!!!");
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家長會議與交流計劃
- 改善供應(yīng)鏈管理的策略計劃
- 現(xiàn)金流對生產(chǎn)的影響計劃
- 掌控時間的職場管理計劃
- 起泡酒知識培訓(xùn)課件視頻
- 頸椎損傷截癱術(shù)后護理
- 護理實操知識培訓(xùn)課件
- 員工防疫知識培訓(xùn)課件
- Unit 6 A Day in the Life 同步教學設(shè)計 2024-2025學年人教版(2024)七年級英語上冊
- 2025年高中化學:“四大平衡”歸納總結(jié)請查收收藏
- 小兒腸套疊護理查房
- DL-T5440-2020重覆冰架空輸電線路設(shè)計技術(shù)規(guī)程
- UG NX12.0基礎(chǔ)與應(yīng)用教程 課件 單元2 任務(wù)2 二維草圖創(chuàng)建和編輯
- DZ∕T 0273-2015 地質(zhì)資料匯交規(guī)范(正式版)
- 中國傳統(tǒng)文化經(jīng)典解讀-《菜根譚》智慧樹知到期末考試答案章節(jié)答案2024年陜西工商職業(yè)學院
- 2069-3-3101-002WKB產(chǎn)品判定準則-外發(fā)
- 2024年江蘇國信儀征 高郵熱電有限責任公司招聘筆試參考題庫含答案解析
- 小班社會《認識家用電器》課件
- JTG C10-2007 公路勘測規(guī)范
- 2024年廣州市高三一模高考英語試卷試題答案詳解(含作文范文)
- 小學英語繪本-小雞
評論
0/150
提交評論