#include "JinLiang.h"
MEMBER * Insert(MEMBER *head,MEMBER *NewNode)
{
MEMBER *p,*q;
char Time[8],NewTime[8];
int i;
q=head;
p=head->next;
while(p!=NULL)
{
for(i=0;i<4;i++)
{
Time[i]=p->NewsDate.year[i];
NewTime[i]=NewNode->NewsDate.year[i];
}
for(i=4;i<6;i++)
{
Time[i]=p->NewsDate.month[i-4];
NewTime[i]=NewNode->NewsDate.month[i-4];
}
for(i=6;i<8;i++)
{
Time[i]=p->NewsDate.day[i-6];
NewTime[i]=NewNode->NewsDate.day[i-6];
}
if(strcmp(Time,NewTime)<0) //按创建时间由远至近排序
{
q=q->next;
p=p->next;
}
else
break;
}
NewNode->next=p;
q->next=NewNode;
return head;
}
MEMBER * Load_from_File(int *FirstTime)
{
FILE *fp;
MEMBER *head,*NewNode;
head=(MEMBER *)malloc(sizeof(MEMBER));
head->next=NULL;
fp=fopen(FILENAME,"rb");
if(fp==NULL)
{
FirstTime_Used();
*FirstTime=1;
fp=fopen(FILENAME,"wb");
fclose(fp);
fp=fopen(FILENAME,"rb");
}
while(!feof(fp))
{
NewNode=(MEMBER *)malloc(sizeof(MEMBER)); //建立新结点
NewNode->next=NULL;
if(1==fread(NewNode,sizeof(MEMBER),1,fp)) //是否读文件成功
Insert(head,NewNode); //将新结点插入至头结点
else
free(NewNode);
}
fclose(fp);
return head;
}
MEMBER *NewNode(MEMBER *head)
{
MEMBER *NewNode=(MEMBER *)malloc(sizeof(MEMBER)); //为新结点申请一个MEMBER结构体大小的内存空间,强制转换成结构体指针类型并储存在NewNode指针变量里
int length; //保存字符串函数strlen()返回值
char tmpDate[10]; //用来保存用户输入的日期
int i;
char yes_no;
if(NULL==NewNode)
{
printf("申请内存失败!\n");
system("pause");
return NULL;
}
NewNode->next=NULL;
//以下从键盘为新节点赋值(添加新闻各项内容)
while(1) //输入标题
{
printf("输入新闻标题(标题长度限制在20位之内):\n");
length=strlen(gets(NewNode->title));
if(0==length || length>20) //输入不能为空串或大于20位
{
printf("输入有误!请重新");
continue;
}
else
break;
}
printf("\n");
while(1) //输入作者
{
printf("输入\"%s\"的作者(长度限制在20位之内):\n",NewNode->title);
length=strlen(gets(NewNode->author));
if(0==length || length>20) //输入不能为空串或大于20位
{
printf("输入有误!请重新");
continue;
}
else
break;
}
printf("\n");
while(1) //输入正文
{
i=0;
printf("输入正文(键入'|'结束输入,限制在100位之内):\n");
while((NewNode->article[i]=getchar())!=STOP)
{
i++;
}
NewNode->article[i]='\0';
while(getchar()!='\n')
continue;
if(STOP==NewNode->article[0])
printf("您并没有输入任何内容!请重新");
else
{
printf("正文已输入完毕,是否查看正文详情(Y/N)?\n");
do
{
yes_no=tolower(getch());
}
while(yes_no!='y' && yes_no!='n');
if('y'==yes_no)
{
Detail(NewNode);
break;
}
else
break;
}
}
printf("\n");
printf("该新闻类型属于(1-新闻社区 2-校园动态 3-黑客编程):\n"); //新闻分类
do //仅在用户输入1,2,3时才会退出循环
{ //我认为在处理用户输入的非法数据时,与向用户提示错误信息并给用户再次输入的机会这种方式相比,对于任何非法数据程序不做任何的响应也许是一种更好的选择
NewNode->style=getch();
}
while((NewNode->style)<='0' || (NewNode->style)>'3');
printf("您已将新闻\"%s\"分类至",NewNode->title);
switch(NewNode->style)
{
case '1':printf("<新闻社区>\n"); break;
case '2':printf("<校园动态>\n"); break;
case '3':printf("<黑客编程>\n"); break;
}
printf("\n");
while(1)
{ //输入日期
printf("输入\"%s\"发表日期(格式:yyyy-mm-dd):\n",NewNode->title);
gets(tmpDate);
if(1==CheckDate(NewNode,tmpDate))
break;
}
return NewNode; //返回新节点的指针
}
void Write_to_File(MEMBER *head)
{
MEMBER *p;
FILE *fp;
fp=fopen(FILENAME,"wb");
p=head->next;
while(p!=NULL)
{
fwrite(p,sizeof(MEMBER),1,fp);
p=p->next;
}
fclose(fp);
}
void List(MEMBER *head)
{
MEMBER *p;
int i;
p=head->next;
system("cls");
printf("%14s%15s%18s%21s\n\n","标题","作者","新闻类型","发表日期"); //表头
while(p!=NULL)
{
printf("%14s%15s",p->title,p->author);
switch(p->style)
{
case '1':printf("%18s","新闻社区"); break;
case '2':printf("%18s","校园动态"); break;
case '3':printf("%18s","黑客编程"); break;
}
printf("%10s","");
for(i=0;i<4;i++)
putchar(p->NewsDate.year[i]);
printf("年");
for(i=0;i<2;i++)
putchar(p->NewsDate.month[i]);
printf("月");
for(i=0;i<2;i++)
putchar(p->NewsDate.day[i]);
printf("日");
printf("\n");
p=p->next;
}
}
int CheckDate(MEMBER *NewNode, char *tmpDate)
{
int i,date[10],dateYear,dateMonth,dateDay;
int flag=1;
do
{
if(strlen(tmpDate)!=10)
{
flag=0;
break;
}
else if(tmpDate[0]!='1' && tmpDate[0]!='2')
{
flag=0;
break;
}
else if(tmpDate[1]<'0' || tmpDate[1]>'9')
{
flag=0;
break;
}
else if('2'==tmpDate[0] && tmpDate[1]!='0')
{
flag=0;
break;
}
else if(tmpDate[2]<'0' || tmpDate[2]>'9')
{
flag=0;
break;
}
else if('2'==tmpDate[0] && tmpDate[2]!='0')
{
flag=0;
break;
}
else if(tmpDate[3]<'0' || tmpDate[3]>'9')
{
flag=0;
break;
}
else if('2'==tmpDate[0] && tmpDate[3]>'6')
{
flag=0;
break;
}
else if(tmpDate[4]!='-')
{
flag=0;
break;
}
else if(tmpDate[5]!='0' && tmpDate[5]!='1')
{
flag=0;
break;
}
else if(tmpDate[6]<'0' || tmpDate[6]>'9')
{
flag=0;
break;
}
else if('1'==tmpDate[5] && tmpDate[6]>'2')
{
flag=0;
break;
}
else if(tmpDate[7]!='-')
{
flag=0;
break;
}
else if(tmpDate[8]<'0' || tmpDate[8]>'3')
{
flag=0;
break;
}
else if(tmpDate[9]<'0' || tmpDate[9]>'9')
{
flag=0;
break;
}
else if('0'==tmpDate[5])
{
if('1'==tmpDate[6] || '3'==tmpDate[6] || '5'==tmpDate[6] || '7'==tmpDate[6] || '8'==tmpDate[6])
{
if('3'==tmpDate[8] && tmpDate[9]>'1') //31天
{
flag=0;
break;
}
}
else if('4'==tmpDate[6] || '6'==tmpDate[6] || '9'==tmpDate[6])
{
if('3'==tmpDate[8] && tmpDate[9]!='0') //30天
{
flag=0;
break;
}
}
}
else if('1'==tmpDate[5])
{
if('1'==tmpDate[6])
{
if('3'==tmpDate[8] && tmpDate[9]!='0')
{
flag=0;
break;
}
}
else
{
if('3'==tmpDate[8] && tmpDate[9]>'1')
{
flag=0;
break;
}
}
}
for(i=0;i<(int)strlen(tmpDate);i++)
{
date[i]=tmpDate[i]-'0';
}
dateYear=1000*date[0]+100*date[1]+10*date[2]+date[3];
dateMonth=10*date[5]+date[6];
dateDay=10*date[8]+date[9];
if(2==dateMonth)
{
if(0==dateYear%4)
{
if(dateDay>29)
{
flag=0;
break;
}
}
else
{
if(dateDay>28)
{
flag=0;
break;
}
}
}
for(i=0;i<4;i++)
NewNode->NewsDate.year[i]=tmpDate[i];
for(i=0;i<2;i++)
NewNode->NewsDate.month[i]=tmpDate[i+5];
for(i=0;i<2;i++)
NewNode->NewsDate.day[i]=tmpDate[i+8];
}
while(!flag);
if(!flag)
printf("您输入的日期格式不对或超出实际范围,请重新输入\n");
return flag;
}
int CheckDate2(char *tmpDate)
{
int i,date[10],dateYear,dateMonth,dateDay;
int flag=1;
do
{
if(strlen(tmpDate)!=10)
{
flag=0;
break;
}
else if(tmpDate[0]!='1' && tmpDate[0]!='2')
{
flag=0;
break;
}
else if(tmpDate[1]<'0' || tmpDate[1]>'9')
{
flag=0;
break;
}
else if('2'==tmpDate[0] && tmpDate[1]!='0')
{
flag=0;
break;
}
else if(tmpDate[2]<'0' || tmpDate[2]>'9')
{
flag=0;
break;
}
else if('2'==tmpDate[0] && tmpDate[2]!='0')
{
flag=0;
break;
}
else if(tmpDate[3]<'0' || tmpDate[3]>'9')
{
flag=0;
break;
}
else if('2'==tmpDate[0] && tmpDate[3]>'6')
{
flag=0;
break;
}
news.rar_用户 注册 登录_登录模块_纯C
版权申诉
128 浏览量
2022-09-24
13:07:55
上传
评论
收藏 67KB RAR 举报
我虽横行却不霸道
- 粉丝: 75
- 资源: 1万+
最新资源
- 6_Advertising-gd_LearningRate.ipynb
- BrushNet电商公司和摄影公司都在用的AI工作流
- 12_base.apk
- 520马上到了两款动态爱心表白HTML代码(附源码)李峋同款爱心,快送给你爱的她或(他)吧12 情侣纪念日代码.zip
- 电子设计竞赛的单相不间断电源设计
- cutcamera1715961370938.png
- 基于MATLAB的图像处理课程设计报告.doc
- tensorflow-gpu-2.6.0-cp38-cp38-manylinux2010-x86-64.whl
- mmexport1715960553858.png
- tensorflow-gpu-2.6.0-cp37-cp37m-manylinux2010-x86-64.whl
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈