目录

题目:

截图:

begin

end


题目:

截图:

begin


#include<stdio.h>
#include <string.h>
#include <time.h>struct user  //用户信息实体
{char name[20];char pass[20];char teleNum[11];char email[20];
} ;typedef struct userNode
{user data;struct userNode* next;
} *LinkUser;struct post //帖子实体
{char name[20];  //作者 - 发帖人char no[20]; //编号struct tm *p;  //时间结构体char theme[30];char content[100];
} ;typedef struct postNode
{post data;struct postNode* next;
} *LinkPost;struct read //读帖实体
{char name[20];char no[20];
} ;typedef struct readNode
{read data;readNode* next;
} *LinkRead;struct reply  //回帖实体
{char name[20];//回复人char no[20]; //帖子编号struct tm *p;  //回复时间char content[200]; //回复内容int lines;
} ;typedef struct replyNode
{reply data;struct replyNode* next;
} *LinkReply;struct postUnited//帖子简介实体 不保存到文件 由其他信息文件 计算得到
{int state;char theme[30];char no[20];int count;  //回帖数量char name[20];char lastReplyName[20];struct tm* p;
} ;typedef struct PUNode
{postUnited data;PUNode* next;
} *LinkPU;//---功能:
/*
*   1 用户注册      finished
*   2 用户登录      finished
*   3 显示界面      finished    读写bug   排序
*   4 阅读帖子      finished    读写bug
*   5 回帖功能      finished
*   6 删帖功能      finished
*   7 发帖功能      finished
*   8 查找功能      finished
*/
//---子功能
/*
*   1   排序      finished
*   2   打印      finished
*   3   比较时间    finished
*   4   读写格式
*/void AddPost(char*);              //添加一条发帖消息
void AddRead(char*,char*);          //标记已读,添加该标记消息
void AddReply(char*,char*);         //添加一条回复记录
void check(int* choose,int a,int b);
void check_password(char*);
void check_email(char*);
void checkNumber(char* teleNumber);
void check_name(char*);
bool containsUser(char* name);
int compareTime(tm* ,tm*);
void deleteReply(char* no,int level,char* name)  ;  //按照楼层删除回复
tm* getTime();                      //获取系统当前时间 yyyy-mm-dd hh-mm-ss
void interface();                   //界面(登录注册)
void InitPU(LinkPU&);
void InitUser(LinkUser&);
void InitPost(LinkPost&);
void InitRead(LinkRead&);
void InitReply(LinkReply&);
bool isMatched(char*,char*);        //模糊查询 字符串匹配
void login();                       //登录
void menu(char*);                   //菜单
void PostAll(LinkPU&);      //帖子简介集合
void printAReply(LinkPost,LinkReply,int);
void printInfoCol();                //帖子简介的列名
void printPostAll(char* name,char*no);          //根据帖子编号查看帖子
void printReply(LinkReply);         //打印一条回复
void printTime(tm *);               //打印时间
void ReadToPost(LinkPost &);
void ReadToPU(char*,LinkPU &);
void ReadToRead(LinkRead &);
void ReadToReply(LinkReply&);
void ReadToUser(LinkUser&);
//void ReadTo
void Register(); //注册
void search(char*);                         //检索
void Sort(LinkPU &L,bool asc,int choose);int main()
{interface();return 0;
}void InitUser(LinkUser& L)
{L=new userNode;L->next=NULL;
}void InitRead(LinkRead &L)
{L=new readNode ;L->next=NULL;
}void InitPost(LinkPost &L)
{L=new postNode;L->next = NULL;
}void InitReply(LinkReply& L)
{L=new replyNode;L->next = NULL;
}void InitPU(LinkPU &L)
{L=new PUNode;L->next = NULL;
}int lengthPu(LinkPU L)
{LinkPU p=L->next;int i=0 ;while (p!=NULL){i++;p=p->next;}return i;
}tm* getTime()
{time_t timep;time (&timep);return gmtime (&timep);
}int compareTime(tm* p,tm* q)  //大于0 表示早 小于0表示晚
{if(p==NULL && q==NULL)return 0;if(p==NULL)return -1;if(q==NULL)return 1;if(p->tm_year < q->tm_year)       //年return 1;if(p->tm_year > q->tm_year)return -1;if(p->tm_mon < q->tm_mon)        //月return 1;if(p->tm_mon > q->tm_mon)return -1;if(p->tm_mday < q->tm_mday)        //日return 1;if(p->tm_mday > q->tm_mday)return -1;if(p->tm_hour < q->tm_hour)      //时return 1;if(p->tm_hour > q->tm_hour)return -1;if(p->tm_min < q->tm_min)        //分return 1;if(p->tm_min > q->tm_min)return -1;if(p->tm_sec < q->tm_sec)          //秒return 1;if(p->tm_sec > q->tm_sec)return -1;return 0;
}void check(int *choose,int a,int b)   //判断选择是否在[a,b]上,若不在,则g
{while(true){if(*choose <a || *choose > b){printf("输入有误,请重新输入范围在[%d,%d]的数...\n",a,b);printf(">>>>");scanf("%d",&*choose);}elsebreak;}
}void check_password(char *pass)
{while (true){if (strlen(pass)< 6){printf("\t密码不得少于6位数,请重新输入:\n");printf(">>>>");scanf("%s", pass);}else{int i;bool flag= false;for(i=0;i< strlen(pass);i++)if(pass[i]<'0' || pass[i]>'9'){flag = true;break;}if(flag)break;else{printf("密码中仅有数字,请重新输入,加入字母符号等\n");scanf("%s",pass);}}}
}void check_email(char* email)
{while (true){if (email[strlen(email )-1] == '@' || email[0]=='@'){printf("邮箱开头和结尾不能是@,请重新输入\n");printf(">>>>");scanf("%s",email);}else{int j;bool flag= false;for (j = 0; j < strlen(email); ++j){if(email[j]=='@'){flag = true;break;}}if(flag)break;else{printf("邮箱中应包含@,请重新输入\n");printf(">>>>");scanf("%s",email);}}}
}void checkNumber(char* teleNumber)
{while (true){if(strlen(teleNumber)!=11){printf("电话号码不为11位,请重新输入:\n");printf(">>>>");scanf("%s",teleNumber);}else{int i;for(i=0;i< strlen(teleNumber);i++)if(teleNumber[i]<'0' || teleNumber[i]>'9'){printf("号码中只能有数字,请重新输入...\n");printf(">>>>");scanf("%s",teleNumber);break;}if(i == strlen(teleNumber))break;}}
}bool containsUser(char* name)
{LinkUser L,p;InitUser(L);ReadToUser(L);p = L->next;while (p!=NULL){if(strcmp(name,p->data.name)==0)return true;p = p->next;}return false;
}void check_name(char* name)
{while (true){if(containsUser(name)){printf("已存在此用户,请重新输入用户名:\n");printf(">>>>");char *newName=new char [20];scanf("%s",newName);strcpy(name,newName);}elsebreak;}
}void Sort(LinkPU &L,bool asc,int choose)  //八位一体的直接插入排序算法
{LinkPU p,optm,first;bool isSwitch = false;for(first = L->next ; first->next!=NULL ; first=first->next) //first下一结点不为空,说明至少有两个元素,则继续排序{optm=first;for(p = first ; p!=NULL ; p=p->next){switch(choose)  // 4种排序方式  升序/降序   8种组合 1个函数{case 1: isSwitch = asc ? strcmp(p->data.no,optm->data.no)<0 : strcmp(p->data.no,optm->data.no)>0 ;break;case 2: isSwitch = asc ? strcmp(p->data.theme,optm->data.theme)<0 : strcmp(p->data.theme,optm->data.theme)>0;break;case 3: isSwitch = asc ? p->data.count < optm->data.count : p->data.count > optm->data.count ;break;case 4: isSwitch = asc ? compareTime(p->data.p,optm->data.p)<0 : compareTime(p->data.p,optm->data.p)>0 ;break;}if( isSwitch )  //升序则 <0交换 否则optm=p;}postUnited temp=optm->data;  //交换数据域optm->data = first->data;first->data = temp;}
}void search(char *name)                                      // 查询
{printf(">>>>1、按照关键字查找 2、按照用户查找\n");printf(">>>>0、主界面\n");printf(">>>>");int choose;scanf("%d",&choose);check(&choose,0,2);char *s=new char [20];int i;LinkPost LP  , pL;LinkReply LR , pR;InitPost(LP);     //文件信息导入到表中InitReply(LR);ReadToReply(LR);ReadToPost(LP);printf("数据导入成功...\n");switch(choose){case 0: menu(name);break;case 1: {printf("请输入关键字...\n");printf(">>>>");scanf("%s", s);//先找postpL = LP->next;while (pL != NULL){if (isMatched(pL->data.content, s)){printf("---------------------------------------------------------------------------\n");printf("【帖子名称】 [%s]问题讨论贴\n", pL->data.theme);printf("【发表时间】:");printTime(pL->data.p);printf("【楼层】:%d楼\n", 1);printf("【内容】%s  ", pL->data.content);}pL = pL->next;}//后找replyfor (pL = LP->next; pL != NULL; pL = pL->next)   //假设post数量为n,reply数量为m,则算法复杂度为O(nm){i = 1;                                       // 如果采用散列表,则时间复杂度为O(m)for (pR = LR->next; pR != NULL; pR = pR->next){if (strcmp(pR->data.no, pL->data.no) == 0){i++;if (isMatched(pR->data.content, s))   //关键字匹配{printAReply(pL, pR, i);}}}}printf("---------------------------------------------------------------------------\n");}break;case 2:{printf("请输入用户名...\n");printf(">>>>");scanf("%s", s);// 先找postpL = LP->next;while (pL) {if (strcmp(pL->data.name, s) == 0){printf("---------------------------------------------------------------------------\n");printf("【帖子名称】 [%s]问题讨论贴\n", pL->data.theme);printf("【发表时间】:");printTime(pL->data.p);printf("【楼层】:%d楼\n", 1);printf("【内容】%s  ", pL->data.content);}pL = pL->next;}// 后找replyfor (pL = LP->next; pL != NULL; pL = pL->next)   //假设post数量为n,reply数量为m,则算法复杂度为O(nm){i = 1;                                       // 如果采用散列表,则时间复杂度为O(m)for (pR = LR->next; pR != NULL; pR = pR->next){if (strcmp(pR->data.no, pL->data.no) == 0){i++;if (strcmp(pR->data.name, s) == 0)  //用户名匹配{printAReply(pL, pR, i);}}}}printf("---------------------------------------------------------------------------\n");}break;}menu(name);
}bool isMatched(char *t,char *key)  //模糊查询算法   查看目标字符串中是否含有关键词key
{  //字符串支持 下标读取 欧耶!!//为了简便//关键词是连续的字符串子序列,没有分开的情况 比如key中 tech ,目标串中不需要考虑tec#hint n=strlen(t);int m=strlen(key);int i=0,j=0;int count=0;if(n>=m)   //key串长度大于目标串时 没有比较的需要{ //模式串匹配 暴力搜索  BFwhile(i<n && j<m){count++;if(t[i]==key[j]){j++;i++;}else{i++;j=0;if(i > n-m)break;}if(j==m)return true;}}return false;
}void login()
{char name[20];char pass[20];printf("请输入用户名:");   scanf("%s",name);printf("请输入密码:");      scanf("%s",pass);int flag=0;FILE *fp;fp=fopen("user.txt","r+"); //读文件if(fp==0){printf("文件打开失败!");}else{user s; //用户while(!feof(fp)){fscanf(fp,"%s %s %s %s\n",s.name,s.pass,s.teleNum,s.email);if(strcmp(name,s.name)==0 && strcmp(pass,s.pass)==0){printf("登录成功!\n");flag=1;break;}if(strcmp(name,s.name)==0 && strcmp(pass,s.pass)!=0){printf("密码错误!\n");flag=2;break;}}fclose(fp);if(flag==0){printf("没有该用户!\n");interface();}else if(flag==1)menu(name);elseinterface();}
}void Register()
{user s;printf(">>>>用户名:"); scanf("%s",s.name);     check_name(s.name);printf(">>>>密码:");  scanf("%s",s.pass);     check_password(s.pass);printf(">>>>电话:");   scanf("%s",s.teleNum);  checkNumber(s.teleNum);printf(">>>>邮箱:");   scanf("%s",s.email);    check_email(s.email);FILE *fp;fp=fopen("user.txt","a+");if(fp==0){printf("文件打开失败!");}else{fprintf(fp,"%20s %20s %11s %20s\n",s.name,s.pass,s.teleNum,s.email);}fclose(fp);interface();
}void menu(char* name)  //用户name所看到的菜单
{printf("\n-----------------欢迎用户%s-----------------------------\n",name);printf("\t请选择以下四种排序方式查看帖子简介:\n");printf("\t1、编号          2、主题名\n");printf("\t3、回复数量     4、最后回复时间\n");printf("---------------------------------------------------------\n");printf("    请选择升序 1/降序 0:\n");printf(">>>>");int asc;scanf("%d",&asc);printf("    请选择排序方式序号:\n");printf(">>>>");int choose;scanf("%d",&choose);check(&choose,1,4);LinkPU L;   //链表头结点InitPU(L);ReadToPU(name,L);          //数据读到 L链表Sort(L,asc==1,choose);  //排序PostAll(L);         //打印帖子简介集合printf("\t1、发帖    2、查看\n");printf("\t3、检索    4、退出登录 \n ");printf(">>>>");scanf("%d",&choose);check(&choose,1,4);bool exist = false;  //检查帖子号是否存在char *no = new char[30];switch (choose){case 1:AddPost(name);break;case 2:{// 选择帖子阅读printf("\t请输入要阅读的帖子编号:\n");printf(">>>>");scanf("%s", no);while (true){LinkPU p = L->next;while (p != NULL){if (strcmp(p->data.no, no) == 0){exist = true;break;}p = p->next;}if (exist)break;else{printf(">>>>输入的编号不存在,请从新输入:");scanf("%s", no);}}}break;case 3: search(name);break;case 4:interface();break;}if(exist){printf("\n\t...查找到此帖子...\n");AddRead(name, no);  //添加一条阅读信息printPostAll(name, no);  //打印帖子内容  读帖}
}void printTime( tm *p)
{if(p!=NULL)printf("%d-%d-%d %d:%d:%d",p->tm_year, p->tm_mon, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);printf("\n");
}void AddPost(char* name)   //发帖
{post p;strcpy(p.name,name);p.p=getTime();printf("请输入帖子编号:");    scanf("%s",p.no);getchar();printf("请输入帖子主题:");char ch,ch_pre;int i=0,j=1;while((ch=getchar())!='\n'){if(ch!=' ')p.theme[i++]=ch;}printf("请输入帖子内容:\n");i=0;while((ch=getchar())!='\n' || ch_pre!='\n'){if(ch!=' '){if (ch_pre == '\n')j++;p.content[i++] = ch;ch_pre = ch;}}//写入文件FILE *fp;fp=fopen("post.txt","a+");if(fp==0){printf("文件打开失败!");}else{fprintf(fp,"%-20s %-20s\n",p.name,p.no);fprintf(fp,"%-d %-d %-d %-d %-d %-d\n",p.p->tm_year+1900,p.p->tm_mon+1,p.p->tm_mday,p.p->tm_hour+8,p.p->tm_min,p.p->tm_sec);fprintf(fp,"%-d\n",j);fprintf(fp,"%-30s\n%-200s\n",p.theme,p.content);}fclose(fp);printPostAll(name,p.no);
}void AddReply(char* name,char* no)  //添加回帖信息
{reply r;r.p=getTime();printf("请输入回复内容:\n");char ch,ch_pre;int i=0,j=0;while((ch=getchar())!='\n' || ch_pre!='\n'){if(ch!=' '){if (ch_pre == '\n')j++;r.content[i++] = ch;ch_pre = ch;}}//写入文件FILE *fp;char *filename="reply.txt";fp=fopen(filename,"a+");if(fp==0){printf("文件%s打开失败!",filename);}else{fprintf(fp,"%20s %20s\n",name,no);fprintf(fp,"%5d %3d %3d %3d %3d %3d\n",r.p->tm_year+1900,r.p->tm_mon+1,r.p->tm_mday,r.p->tm_hour+8,r.p->tm_min,r.p->tm_sec);fprintf(fp,"%d\n",j);fprintf(fp,"%-200s\n",r.content);}fclose(fp);printPostAll(name,no);
}void AddRead(char* name,char* no)   //添加读帖信息
{bool exist= false;LinkRead L,p;InitRead(L);ReadToRead(L);p = L->next;while (p){if(strcmp(p->data.name,name)==0 && strcmp(p->data.no,no)==0){exist = true;break;}p = p->next;}if(!exist){FILE *fp;fp = fopen("read.txt", "a+");if (fp == 0){printf("文件打开失败!");} else{fprintf(fp, "%20s %20s\n", name, no);}fclose(fp);}
}void deleteReply(char* no,int level,char* name)   // 删帖
{LinkReply rL, Pr,front;InitReply(rL);ReadToReply(rL);front=rL;Pr = rL->next;int i=2;while(Pr!=NULL){if(strcmp(Pr->data.no,no)==0){if(i==level)break;i++;}front = front->next;Pr = Pr->next;}front->next = Pr->next;  //删除该楼层消息Pr = rL->next;FILE *fp;char filename[]="reply.txt";fp= fopen(filename,"w");if(fp==0){printf("文件%s打开失败!\n",filename);}else{while (Pr!=NULL){fprintf(fp,"%20s %20s\n",Pr->data.name,Pr->data.no);fprintf(fp,"%5d %3d %3d %3d %3d %3d\n",Pr->data.p->tm_year,Pr->data.p->tm_mon,Pr->data.p->tm_mday,Pr->data.p->tm_hour,Pr->data.p->tm_min,Pr->data.p->tm_sec);fprintf(fp,"%d\n",Pr->data.lines);fprintf(fp,"%-200s\n",Pr->data.content);Pr = Pr->next;}}fclose(fp);printPostAll(name, no);
}void ReadToRead(LinkRead &L)
{LinkRead p = L;FILE *fp;char filename[]="read.txt";fp=fopen(filename,"r"); //读文件if(fp==0){printf("文件%s打开失败!\n",filename);}else{while(!feof(fp)) //指针不到末尾{p->next=new readNode;p=p->next;fscanf(fp,"%20s %20s\n",p->data.name,p->data.no);}p->next=NULL; //链表的尾结点的next指向NULL}fclose(fp);
}void ReadToPost(LinkPost &L)
{LinkPost p = L;int j=0;FILE *fp;char filename[]="post.txt";fp=fopen(filename,"r+"); //读文件if(fp==0){printf("文件%s打开失败!\n",filename);}else{while(!feof(fp)) //指针不到末尾{p->next=new postNode;p=p->next;p->data.p = new tm;fscanf(fp,"%20s %20s\n",p->data.name,p->data.no);fscanf(fp,"%d %d %d %d %d %d\n",&p->data.p->tm_year,&p->data.p->tm_mon,&p->data.p->tm_mday,&p->data.p->tm_hour,&p->data.p->tm_min,&p->data.p->tm_sec);fscanf(fp,"%d\n",&j);fscanf(fp,"%30s\n",p->data.theme);int i;char *s=new char[50] ;for(i=0;i<j;i++){fscanf(fp,"%s\n",s);strcat(s,"\n");strcat(p->data.content,s);}}p->next=NULL; //链表的尾结点的next指向NULL}fclose(fp);
}void ReadToReply(LinkReply &L)
{LinkReply p=L;int j;FILE *fp;char filename[]="reply.txt";fp=fopen(filename,"r+"); //读文件if(fp==0){printf("文件%s打开失败!\n",filename);}else{while(!feof(fp)) //指针不到末尾{p->next=new replyNode;p=p->next;p->data.p = new tm;fscanf(fp,"%20s %20s\n",p->data.name,p->data.no);fscanf(fp,"%d %d %d %d %d %d\n",&p->data.p->tm_year ,&p->data.p->tm_mon,&p->data.p->tm_mday,&p->data.p->tm_hour,&p->data.p->tm_min,&p->data.p->tm_sec);fscanf(fp,"%d\n",&j);p->data.lines=j;int i;char *s=new char[100];for(i=0;i<j;i++){fscanf(fp,"%s\n",s);strcat(s,"\n");strcat(p->data.content,s);}}p->next=NULL; //链表的尾结点的next指向NULL}fclose(fp);
}void ReadToPU(char* name,LinkPU& L)
{LinkPU p=L;LinkRead rdL,Prd ;LinkPost pL,Pp;LinkReply rL,Pr,PrMemory;InitRead(rdL);InitPost(pL);InitReply(rL);ReadToRead(rdL); //读取信息到 read post reply中ReadToPost(pL);ReadToReply(rL);Pp = pL->next;while(Pp!=NULL){p->next = new PUNode;p=p->next;p->data.p=new tm;//以发帖数据项为主char no[20];// 添加 帖子编号 发帖人姓名 帖子主题strcpy(no,Pp->data.no) ;strcpy(p->data.no,no) ;        //帖子编号strcpy(p->data.name,Pp->data.name) ; //发帖人姓名strcpy(p->data.theme,Pp->data.theme);//帖子主题// 添加状态信息Prd = rdL->next;while(Prd!=NULL){if(strcmp(Prd->data.no,no)==0 && strcmp(Prd->data.name,name)==0) //如果有记录,则读过{p->data.state=1;break;}p->data.state=0;Prd=Prd->next;}// 添加 回复数量 最后回复人 最后回复时间Pr = rL->next;PrMemory=NULL;int count=0;while(Pr!=NULL){if(strcmp(Pr->data.no,no)==0)  //回复该帖子的数据项{count++;PrMemory = Pr;}if(Pr->next==NULL){p->data.count = count;if(PrMemory!=NULL){strcpy(p->data.lastReplyName, PrMemory->data.name);  //最后回复的人p->data.p = PrMemory->data.p;}                   //最后回复时间else{p->data.p = NULL;strcpy(p->data.lastReplyName,"");}}Pr = Pr->next;}Pp = Pp->next;}p->next=NULL;
}void ReadToUser(LinkUser &L)
{LinkUser p=L;char filename[]="user.txt";FILE *fp= fopen(filename,"r+");if(fp==0){printf("文件%s不存在",filename);}else{while (!feof(fp)){p->next = new userNode;p = p->next;fscanf(fp,"%20s %20s %11s %20s",p->data.name,p->data.pass,p->data.teleNum,p->data.email);}}p->next=NULL;fclose(fp);
}void printInfoCol()
{printf("状态   编号   主题名\t\t回复\t作者\t   最后回复\t回复时间\n");
}void PostAll(LinkPU &L)  //帖子简介集合
{LinkPU p;p = L->next; //指向链表首结点// 打印帖子简介printf("--------------------------------------------------------------------------------------\n");printInfoCol();           //打印列名while(p!=NULL){printf("%-5s %-6s %-20s %-5d %-10s %-10s",p->data.state==0?"-":"+",p->data.no,p->data.theme,p->data.count,p->data.name,p->data.lastReplyName);printTime(p->data.p);p = p->next;}printf("-------------------------------------------------------------------------------------\n");
}void printPostAll(char *name,char* no)  //根据帖子编号查看帖子
{//帖子主题  楼层LinkPost L ,p ;InitPost(L);ReadToPost(L);p = L->next;while(p!=NULL){if(strcmp(p->data.no,no)==0){break;}p = p->next;}int i=1;if(p!=NULL){printf("【%s】\t\t问题讨论帖\n", p->data.theme);printf("---------------------------------------------------\n");printf("【%d楼】 %s \t发表时间:", i++, p->data.name);printTime(p->data.p);printf("【问题描述】%s  \n", p->data.content);printf("---------------------------------------------------\n");// 打印 回贴LinkReply rL, Pr;InitReply(rL);ReadToReply(rL);Pr = rL->next;while (Pr != NULL){if (strcmp(Pr->data.no, no) == 0){printf("【%d楼】", i++);printReply(Pr);}Pr = Pr->next;}}printf("\t1、回复        2、删帖\n");printf("\t3、返回主界面\n");printf(">>>>");int choose;scanf("%d",&choose);check(&choose,1,3);switch(choose){case 1: AddReply(name,no);break;case 2:{int level;printf("请输入要删除的帖子的层数...\n");printf(">>>>");scanf("%d", &level);check(&level, 2, i - 1);//检查是不是贴主是不是自己p = L->next;bool flag = false;while (p != NULL){if (strcmp(p->data.name, name) == 0){flag = true;break;}p = p->next;}if (flag)deleteReply(no, level, name);elseprintf("您不是该贴的贴主(%s),不能删帖\n", no);}break;case 3: menu(name);break;}
}void printReply(LinkReply p)
{printf("%s\t\t【发表时间】:",p->data.name);  printTime(p->data.p);printf("【内容】%s",p->data.content);printf("------------------------------------------------------------------------------------------\n");
}void printAReply(LinkPost pL,LinkReply pR,int level)
{printf("------------------------------------------------------------------------------------------\n");printf("【帖子名称】 [%s]问题讨论贴\n",pL->data.theme);printf("【发表时间】:");printTime(pR->data.p);printf("【楼层】:%d楼\n",level);printf("【内容】%s  \n",pR->data.content);
}void interface() //登录注册界面
{printf("1: 登录  2:注册 0:退出 :\n");printf(">>>>");int choose;scanf("%d",&choose);check(&choose,0,2);switch(choose){case 1: login();break;case 2: Register();break;case 0: printf("\t\t\t再见!\n");break;}
}

end

C语言论坛系统课程设计相关推荐

  1. c语言选课系统课程设计,用C语言写一个 学生选课系统

    匿名用户 1级 2009-07-05 回答 #include #include int N1,N2,kk1,kk2,kk3; struct couse * head1; struct student ...

  2. C语言——抽奖系统(课程设计)

    [文末获取资源] 该程序的功能包括: 1.设置中奖人员 2.设置内幕人员 3.添加功能 4.删除功能 5.颜色设置 6.开发人员介绍 在使用该系统之前,请先在你程序保存的位置建一个17计科2.txt文 ...

  3. 四六级考试报名系统c语言,四六级考试系统课程设计报告.doc

    四六级考试系统课程设计报告 <.NET架构及应用>期末考试 (课程设计总结) 设计名称: 英语四.六级考试报名系统 组 长: 白缔祖 参 加 人: 白缔祖.霍晓文 指导教师: 付向东 班 ...

  4. c语言标准化考试系统课程设计,c语言标准化考试系统课程设计

    1.课课 程程 报报 告告课课 程程 名名 称:称: 标准化考试系统 专专 业业 班班 级级 : 学学 生生 姓姓 名名 : 学学 号号 : 任任 课课 教教 师师 : 学学 期期 : 课程报告任务书 ...

  5. 图书馆系统c语言作业,C语言图书馆管理系统课程设计报告

    <C语言图书馆管理系统课程设计报告>由会员分享,可在线阅读,更多相关<C语言图书馆管理系统课程设计报告(16页珍藏版)>请在人人文库网上搜索. 1.高级语言程序设计课程设计报告 ...

  6. c语言程序设计课程设计通讯录,《C语言程序设计》课程设计-通讯录系统(42页)-原创力文档...

    <C语言程序设计>课程设计 学 学 号:________ 姓 名:____ 指导教师:_________ 完成日期:2010.07.03 ______________学校______系__ ...

  7. c语言招生信息查询系统,《C语言程序设计》课程设计报-招生信息查询系统.docx...

    <C语言程序设计>课程设计报-招生信息查询系统 课程设计报告题目:招生信息查询系统课程名称:C语言程序设计专业班级:信息安全1302学号:姓名:指导教师:报告日期:2014年9月17日计算 ...

  8. c语言查询课程信息,《C语言程序设计》课程设计报告-招生信息查询系统.docx

    <C语言程序设计>课程设计报告-招生信息查询系统 课 程 设 计 报 告题目: 招生信息查询系统 课程名称: C语言程序设计 专业班级: 信息安全1302 学 号: 姓 名: 指导教师: ...

  9. c语言数据结构校园导游系统,校园导游系统课程设计报告

    校园导游系统课程设计报告 目录 1.需求分析1 2.总体设计1 2.1 抽象数据类型图的定义1 2.2 程序中包含的模块1 2.3模块间的调用关系3 3.详细设计3 3.1 代码设计3 3.1.1 定 ...

  10. 红外遥控C语言程序设计,光电红外遥控开关设计(光电系统课程设计)【PCB图仿真图单片机C语言分工心得】..doc...

    光电红外遥控开关设计(光电系统课程设计)[PCB图仿真图单片机C语言分工心得]. 本科生课程论文 论文题目光电红外遥控开关设计课程名称光电系统设计学生姓名学号所在学院所在班级指导教师 目 录 摘要3 ...

最新文章

  1. 上海电力大学计算机专业分数线,上海电力大学2020年录取分数线(附2017-2020年分数线)...
  2. 丢包和网络延迟对网络性能的影响
  3. Amarino例程无法使用的问题
  4. 说说JSON和JSONP
  5. [译] 原生 JavaScript 值得学习吗?答案是肯定的
  6. 独立思考者模型:寻找潜藏在表象背后的真相 探寻真相的方法
  7. 涨知识了!阿里、百度、腾讯的名字竟然是这样来的
  8. 在适当的场合使用FlagsAttribute修饰枚举
  9. 【Vue-router中,require代替import解决vue项目首页加载时间过久】
  10. labview嵌入c代码_LabVIEW是什么?与其他组态软件有何分别?
  11. BitMEX将调整Impact Notional和Index Price Protection两个参数
  12. html表头跟随滚动,JS实现table表格固定表头且表头随横向滚动而滚动_心善_前端开发者...
  13. ubuntu 定时执行重启(crontab)
  14. 计算机信息处理技术员初级难不难,考信息处理技术员之前,这些问题你要知道!...
  15. VBS教程(入门级)
  16. mybatis sql 按照特定的字段顺序排序,按照拼音首字母排序
  17. 理解Resnet18的18的含义
  18. QQ隐藏福利二-----------------那些免费的挂件和气泡
  19. 基于SSM的商城管理系统
  20. word中怎么把脚注转换为尾注

热门文章

  1. html 圣诞节贺卡模板,圣诞节立体贺卡模板大全
  2. c语言 tls单向认证 验证证书,使用wireshark观察SSL/TLS握手过程--双向认证/单向认证...
  3. ping-pong buffer
  4. python回车和换行的区别_换行\ n与回车\ r的区别
  5. matlab 线透明度,matlab 曲线填充 透明度
  6. java获取时分秒毫秒_java 中毫秒数转换成时分秒格式java中有什么方法可以把一个毫秒数格式化成”时:分:秒”...
  7. 「津津乐道播客」#309 厂长来了:我们买买买了这么多年,然后呢?(feat. 只二)...
  8. Windows和Linux 20.04两台主机如何共用一套键鼠
  9. java中的原型模式_原型模式(原型设计模式)详解
  10. Java生成解析一维码二维码