#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include<math.h>
#include <conio.h>
#include<ctype.h>
#define SIZE 20
#define bool int
#define TRUE 1
#define FALSE 0
bool judge=TRUE;
FILE *fp;
struct student_infor {
int num;//学号
char name[20];//姓名
char sex[10];//性别
int age;//年龄
char major[20];//专业
int math;//高数成绩
int English;//英语成绩
int Clanguage;//C语言成绩
int sum;//总分
double average;//平均分
struct student_infor *next;
}stu[SIZE];
//管理员密码结构体
typedef struct leader{
char name[100];
char mima[100];
}lead;
//学生登录密码结构体
typedef struct
{
char user[100];
char code[100];
}users;
users k;
typedef struct Node{
struct student_infor data;
struct Node *next;
}Node;
void Window(char *);//初始窗口和界面
void initleader(lead* );
void studentdenglu();
void write();
void login();//登录
void menu();//管理员菜单
void menue(); //学生菜单
void judgement1();
void judgement2();
int infor_input(void);//录入
int infor_show(void);//显示
int infor_search(void);//查询
int infor_add(void);//添加
void infor_change();//修改
int infor_paixu(void);//排序
int infor_tongji1(void);//统计
int infor_tongji2(void);
int out(void);//退出
//一、初始窗口和界面
void Window(char *title){
//设置窗口大小
system("mode con:cols=90 lines=200");
//设置窗口字体的颜色
system("color 4E");
//循环输出标题(条件:)
while(*title!=0)
{
//输出字符指针所指向的内容
printf("%c",*title);
//将指针指向下一个字符
title++;
//休眠
Sleep(50);
}
}
//管理员登录
void initleader(lead* lea){
printf("\n\n\n\t\t\t初次登录,请设置管理员信息:");
printf("\n\t\t\t账号:");
scanf("%s",lea->name);
printf("\n\t\t\t密码:");
scanf("%s",lea->mima);
printf("\n\t\t\t设置完成,按任意键进入系统...");
getch();
}
void initdata(Node* head,lead* lea){
Node *temp;
//打开文件
FILE *fp = fopen("guanliyuan.txt","rt");
//读取上次的管理员信息
fread(lea,sizeof(lead),1,fp );
temp = head;
//下面这个循环读取学生信息到链表
Node *p = (Node*)malloc(sizeof(Node));
while(fread(&p->data,sizeof(p->data),1,fp) == 1){
temp->next = p;
p->next = NULL;
temp = temp->next;
p = (Node*)malloc(sizeof(Node));
}
free(p);
fclose(fp);
}
void readdata(Node *head,lead* lea){
FILE *fp = fopen("guanliyuan.txt","rt");
if(fp == NULL){
//如果打不开,则证明是第一次使用,提示初始化管理员信息
initleader(lea);
return;
}
else{
fclose(fp);
//如果打开了,就不是第一次使用,就把文件中的东西读到链表中
initdata(head,lea);
}
}
int yanzhengleader(lead* lea){
char a[100],b[100];
system("CLS");
printf("\n\n\n\t\t\t需要进行管理员验证:");
printf("\n\n\n\n\t\t\t请输入账号:");
scanf("%s",a);
printf("\n\n\n\n\t\t\t请输入密码:");
scanf("%s",b);
if((strcmp(a,lea->name ) == 0) && (strcmp(b,lea->mima) == 0) ){
gets(a);return 1;
}else gets(a); return 0;
}
void savedata(Node* head,lead* lea){
//以只写的形式打开
FILE *fp = fopen("guanliyuan.txt","w");
//写入管理员信息
fwrite(lea,sizeof(lead),1,fp);
head = head->next;
//写入链表上的学生信息
while(head){
fwrite(&head->data,sizeof(head->data),1,fp);
head = head->next;
}
fclose(fp);
}
//学生登录
void zhuce(){
system("CLS");
FILE *fp;
char temp[100];
do
{
printf("\t\t\t\t用户注册\n\t\t用户名:");
scanf("%s",k.user);
fp=fopen(k.user,"r");
//判断用户名是否重复
if(fp!=NULL)
{
printf("\n\t该用户已存在");
fclose(fp);
printf("\n\t继续注册?(Y/N)");
if(getch()=='Y')
return zhuce();
else
return studentdenglu();
}
//确认两次密码输入是否一致
printf("\n\t\t密码:");
scanf("%s",k.code);
printf("\n\t\t确认密码:");
scanf("%s",temp);
if(strcmp(k.code,temp)!=0)
printf("\n\t\t两次密码输入不一致,请重新输入\n");
}while(strcmp(k.code,temp)!=0);
//用户名密码无误,写入文档储存用户信息
fp=fopen(k.user,"w");
if(fp==NULL)
{
printf("\n\t注册失败\n");
exit(0);
}
else
{
system("CLS");
printf("\n\t注册成功");
write();
judge = FALSE;
studentdenglu();
}
}
void write()
{
if(fwrite(&k,sizeof(k),1,fp)!=1)
{
printf("\n\t\t写入文件错误\n");
}
}
//学生登录
void studentdenglu(){
char u[100],c[100],temp[100];
printf("\n\t\t\t\t用户登录");
printf("\n\t\t用户名:");
scanf("%s",u);
//判断用户名是否存在
fp=fopen(u,"r+");
temp[0]='0';
if(fp==NULL)
{
printf("\n\t\t用户不存在,请注册");
printf("\n\t\t1.注册 2.重新登录");
temp[0]=getch();
if(temp[0]=='1')
{
system("CLS");
zhuce();
}
else
return studentdenglu();
}
//验证密码是否正确
do{
if(judge==TRUE)
fread(&k,sizeof(users),1,fp);
printf("\t\t密码:");
scanf("%s",c);
if(strcmp(k.code,c)!=0)
{
printf("\n\t\t密码错误(1.退出 2.重新输入)");
temp[0]=getch();
printf("\n");
if(temp[0]=='1')
{
fclose(fp);
return login();
}
}
}while(temp[0]=='2');
printf("登陆成功!");
Sleep(2000);
menue();
}
//二、密码登录
void login(){
system("CLS");
system("color 37");
printf("请选择登录方式:\n1.管理员登录\n2.学生登录\n\n");
int n,j=0;
char c,password[6];
scanf("%d",&n);
switch(n){
case 1: system("CLS");
lead* lea;
Node *head;
//申请一个管理员结点来保存管理员的信息
lea = (lead*)malloc(sizeof(lead));
//初始化数据链
head = (Node*)malloc(sizeof(Node));
head->next = NULL;
//尝试从文件中读取数据,也就是初始化数据函数
readdata(head,lea);
//验证管理员函数
while(yanzhengleader(lea) == 0);
savedata(head,lea);
while(1){
menu();
}
break;
case 2: zhuce();
break;
}
}
//管理员菜单
void menu(){
system("CLS");
system("mode con:cols=250 lines=300");
system("color 1F");
printf("\t\t**********************\n\n");
printf("\t\t学生管理系统\n\n");
printf("1.录入学生成绩\n\n");
printf("2.显示学生成绩\n\n");
printf("3.查询学生成绩\n\n");
printf("4.添加学生成绩\n\n");
printf("5.修改学生成绩\n\n");
printf("7.学生成绩排序\n\n");
printf("8.学生成绩统计\n\n");
printf("0.退出系统\n\n");
printf("\n\n请选择(0~8):\n\n");
printf("\t\t**********************\n\n");
int choose;
while(1)
{
scanf("%d",&choose);
switch(choose)
{
case 1: system("CLS");
infor_input();
judgement1();
break;
case 2: system("CLS");
infor_show();
judgement1();
break;
case 3: system("CLS");
infor_search();
judgement1();
break;
case 4: system("CLS");
infor_add();
judgement1();
case 5: system("CLS");
infor_change();
judgement1();
break;
case 7: system("CLS");
infor_paixu();
judgement1();
break;
case 8: system("CLS");
infor_tongji1();
break;
case 0: system("CLS");
system("color 0C");
out();
exit(0);
break;
default:printf("您输入了一个无效的选择,请重新输入(0-6):\n ");
continue;
}
system("PAUSE");
}
}
//学生菜单
void menue(){
system("CLS");
system("mode con:cols=250 lines=300");
system("color 1F");
printf("\t\t**********************\n\n");
printf("\t\t欢迎进入学生管理系统\n\n");
printf("1.显示学生成绩\n\n");
printf("2.查询学生成绩\n\n");
printf("3.学生成绩排序\n\n");
printf("4.学生成绩统计\n\n");
printf("0.退出系统\n\n");
printf("\n\n请选择(0~4):\n\n");
printf("\t\t**********************\n\n");
int choose;
while(1)
{
scanf("%d",&choose);
switch(choose)
{
case 1: system("CLS");
infor_show();
judgement2();
break;
case 2: system("CLS");
infor_search();
judgement2();
break;
case 3: system("CLS");
infor_paixu();
judgement2();
break;
case 4: system("CLS");
infor_tongji2();
break;
case 0: system("CLS");
system("color 0C");
out();
exit(0);
break;
default:printf("您输入了一个无效的选择,请重新输入(0-4):\n ");
continue;
}
system("PAUSE");
}
}
//判断
void judgement1(){
int m;
printf("返回上一级菜单请按1,退出请按0: ");
scanf("%d", &m);
if (m == 0)
{
system("CLS");
system("color 0C");
out();
Sleep(1000);
exit(0);
}
if (m == 1)
{
menu();
}
}
void judgement2(){
int m;
printf("返回上一级菜单请按1,退出请按0: ");
scanf("%d", &m);
if (m == 0)
{
system("CLS");
system("color 0C");
out();
Sleep(1000);
exit(0);
}
if (m == 1)
{
menue();
}
}
//结尾3D心形
float f(float x, float y, float z) {
float a = x * x + 9.0f / 4.0f * y * y + z * z - 1;
return a * a * a - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z;
}
float h(float x, float z) {
for (float y = 1.0f; y >= 0.0f; y -= 0.001f)
if (f(x, y, z) <= 0.0f)
return y;
return 0.0f;
}
int out(void)
{
for (float z = 1.5f; z > -1.5f; z -= 0.05f) {
for (float x = -1.5f; x < 1.5f; x += 0.025f) {
float v = f(x, 0.0f, z);
if (v <= 0.0f) {
float y0 = h(x, z);
float ny = 0.01f;
float nx = h(x + ny, z) - y0;
float nz = h(x, z + ny) - y0;
float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);
float d = (nx + ny - nz) * nd * 0.5f + 0.5f;
putchar(".:-=+*#%@"[(int)(d * 5.0f)]);
}
else
putchar(' ');
}
putchar('\n');
}
printf("See you\n");
}
// 1. 学生信息录入
int infor_input(void)
{
system("color 80");
FILE *fp;
fp=fopen("studentinfor.txt","wb");
if(fp==NULL)
{
printf(" cannot open file studentinfor.txt\n");
exit(0);
}
printf("输入要录入的学生数目:\n");
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
printf("学号 姓名 性别 年龄 专业 高数 英语 C语言\n");
scanf("%d%s%s%d%s%d%d%d",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].age,&stu[i].major,&stu[i].math,&stu[i].English,&stu[i].Clanguage);
stu[i].sum = stu[i].math + stu[i].English + stu[i].Clanguage;
stu[i].average = stu[i].sum / 3.0;
}
for (int i = 0; i < n; i++)
if (fwrite(&stu[i], sizeof(struct student_infor),1,fp)!=1)
printf("file write error!\n");
fclose(fp);
}
//2.显示学生信息
int infor_show()
{
FILE *fp;
int i;
fp=fopen("studentinfor.txt","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------------------\n");
printf("学号 姓名 性别 年龄 专业 高数 英语 C语言成绩 总成绩 平均成绩\n");
printf("-----------------------------------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student_infor),1,fp)==1;i++)//for(i=0;fread(&stu[i],6,1,fp)==1;i++)
{
printf("%d%6s%3s%3d%6s%6d%6d%6d%6d %.2lf\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].major,stu[i].math,stu[i].English,stu[i].Clanguage,stu[i].sum,stu[i].average);
}
printf("-----------------------------------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
fclose(fp);
}
//3.查询学生信息
int infor_search(){
FILE *fp;
int num;
fp=fopen("studentinfor.txt","rb");
printf("请输入要查找的学号:");
scanf("%d",&num);
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 查询结果\n");
printf("-----------------------------------------------------------------------------------\n");
printf("学号 姓名 性别 专业 高数 英语 C语言 总成绩 平均成绩\n");
printf("-----------------------------------------------------------------------------------\n");
for(int i=0;fread(&stu[i],sizeof(struct student_infor),1,fp)==1;i++)
if(stu[i].num==num)
{
printf("%d%6s%3s%3d%6s%6d%6d%6d%6d %.2lf\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].major,stu[i].math,stu[i].English,stu[i].Clanguage,stu[i].sum,stu[i].average);
}
printf("-----------------------------------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n");
fclose(fp);
}
//4.添加学生成绩
int infor_add()
{
FILE *fp;
fp=fopen("studentinfor.txt","ab+");
// rewind(fp);
for(int i=0;fread(&stu[i],sizeof(struct student_infor),1,fp)==1;i++);
int n;
printf("请输入要添加学生信息数目:");
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
printf("请输入要增加的学号,姓名,性别, 年龄,专业, 高数成绩,英语成绩, c语言成绩:\n");
scanf("%d%s%s%d%s%d%d%d",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].age,&stu[i].major,&stu[i].math,&stu[i].English,&stu[i].Clanguage);
stu[i].sum = stu[i].math + stu[i].English + stu[i].Clanguage;
stu[i].average = stu[i].sum / 3.0;
fwrite(&stu[i],sizeof(struct student_infor),1,fp);
}
fclose(fp);
}
//5.修改学生成绩
void infor_change(){
FILE *fp;
fp=fopen("studentinfor.txt","rb");
int i,num,n;
int flag=0;
printf("请输入要修改学生的学号:");
scanf("%d",&num);
for(i=0;fread(&stu[i],sizeof(struct student_infor),1,fp)==1;i++)
if(stu[i].num==num)
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------------------\n");
printf("学号 姓名 性别 年龄 专业 高数 英语 C语言成绩 总成绩 平均成绩\n");
printf("-----------------------------------------------------------------------------------\n");
printf("%d%6s%3s%3d%6s%6d%6d%6d%6d %.2lf\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].major,stu[i].math,stu[i].English,stu[i].Clanguage,stu[i].sum,stu[i].average);
printf("-----------------------------------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
n=i;
flag=1;
}fclose(fp);
if(flag==0)
{
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 输入错误!\n");
printf(" 请返回!\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
return;
}
printf("\n\n\n");
fp=fopen("studentinfor.txt","rb+");
fseek(fp,n*sizeof(struct student_infor),0);
printf("请输入修改后的学号,姓名,性别, 年龄,专业, 高数成绩,英语成绩, c语言成绩:\n");
scanf("%d%s%s%d%s%d%d%d",&stu[i].num,&stu[i].name,&stu[i].sex,&stu[i].age,&stu[i].major,&stu[i].math,&stu[i].English,&stu[i].Clanguage);
stu[i].sum = stu[i].math + stu[i].English + stu[i].Clanguage;
stu[i].average = stu[i].sum / 3.0;
fwrite(&stu[i],sizeof(struct student_infor),1,fp);
fclose(fp);
fp=fopen("studentinfor.txt","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------------------\n");
printf("学号 姓名 性别 年龄 专业 高数 英语 C语言成绩 总成绩 平均成绩\n");
printf("-----------------------------------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student_infor),1,fp)==1;i++)
{
printf("%d%6s%3s%3d%6s%6d%6d%6d%6d %.2lf\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].major,stu[i].math,stu[i].English,stu[i].Clanguage,stu[i].sum,stu[i].average);
}
printf("-----------------------------------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
fclose(fp);
}
//7.学生成绩排序
int infor_paixu(void)
{
int i,j,n;
FILE *fp;
struct student_infor t;
fp=fopen("studentinfor.txt","rb");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表\n");
printf("-----------------------------------------------------------------------------------\n");
printf("学号 姓名 性别 年龄 专业 高数 英语 C语言 总成绩 平均成绩\n");
printf("-----------------------------------------------------------\n");
for(i=0;fread(&stu[i],sizeof(struct student_infor),1,fp)==1;i++)
{
printf("%d%6s%3s%3d%6s%6d%6d%6d%6d %.2lf\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].major,stu[i].math,stu[i].English,stu[i].Clanguage,stu[i].sum,stu[i].average);
}
printf("-----------------------------------------------------------------------------------\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
fclose(fp);
n=i;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(stu[i].sum<stu[j].sum)
{
t=stu[i];
stu[i]=stu[j];
stu[j]=t;
}
fp=fopen("studentinfor.txt","wb");
printf("\n\n\n");
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
printf(" 成绩列表 \n");
printf("-----------------------------------------------------------------------------------\n");
printf("学号 姓名 性别 年龄 专业 高数 英语 C语言 总成绩 平均成绩\n");
printf("-----------------------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
fwrite(&stu[i],sizeof(struct student_infor),1,fp);
printf("%d%6s%3s%3d%6s%6d%6d%6d%6d %.2lf\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].age,stu[i].major,stu[i].math,stu[i].English,stu[i].Clanguage,stu[i].sum,stu[i].average);
}
printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");
fclose(fp);
}
//8.学生成绩统计
int infor_tongji1(void)
{
int x,k;
printf("********************输入统计选项**********************\n"); /*选择功能菜单*/
printf("统计高数成绩不及格率请按:1\n");
printf("统计英语成绩不及格率请按:2\n");
printf("统计C语言成绩不及格率请按:3\n");
scanf("%d",&x);//用户选择变量
FILE *fp;
fp=fopen("studentinfor.txt","rb");
if(x==1)
{
k=0;
for(int i=0;fread(&stu[i],sizeof(struct student_infor),1,fp)==1;i++)/*统计高数成绩不及格率*/
{
if(stu[i].math<60)
k++,
printf("不及格的分数为%d\n",stu[i].math);
}
printf("共%d人高数未及格\n",k);
printf("************************************************************\n");
}
if(x==2)
{
k=0;
for(int i=0;fread(&stu[i],sizeof(struct student_infor),1,fp)==1;i++)/*统计英语成绩不及格率*/
{
if(stu[i].English<60)
k++,
printf("不及格的分数为%d\n",stu[i].English);
}
printf("共%d人英语不及格\n",k);
printf(" **********************************************************\n");
}
if(x==3)
{
k=0;
for(int i=0;fread(&stu[i],sizeof(struct student_infor),1,fp)==1;i++)/*统计英语成绩不及格率*/
{
if(stu[i].Clanguage<60)
k++,
printf("不及格的分数为%d\n",stu[i].Clanguage);
}
printf("共%d人C语言成绩不及格\n",k);
printf(" **********************************************************");
}
int m;
printf("返回上一级菜单请按1,返回主菜单请按2,退出请按0: ");
scanf("%d", &m);
if (m == 0)
{
system("CLS");
system("color 0C");
out();
Sleep(1000);
exit(0);
}
if(m == 1){
infor_tongji1();
}
if (m == 2)
{
menu();
}
}
int infor_tongji2(void)
{
int x,k;
printf("********************输入统计选项**********************\n"); /*选择功能菜单*/
printf("统计高数成绩不及格率请按:1\n");
printf("统计英语成绩不及格率请按:2\n");
printf("统计C语言成绩不及格率请按:3\n");
scanf("%d",&x);//用户选择变量
FILE *fp;
fp=fopen("studentinfor.txt","rb");
if(x==1)
{
k=0;
for(int i=0;fread(&stu[i],sizeof(struct student_infor),1,fp)==1;i++)/*统计高数成绩不及格率*/
{
if(stu[i].math<60)
k++,
printf("不及格的分数为%d\n",stu[i].math);
}
printf("共%d人高数未及格\n",k);
printf("************************************************************\n");
}
if(x==2)
{
k=0;
for(int i=0;fread(&stu[i],sizeof(struct student_infor),1,fp)==1;i++)/*统计英语成绩不及格率*/
{
if(stu[i].English<60)
k++,
printf("不及格的分数为%d\n",stu[i].English);
}
printf("共%d人英语不及格\n",k);
printf(" **********************************************************");
}
if(x==3)
{
k=0;
for(int i=0;fread(&stu[i],sizeof(struct student_infor),1,fp)==1;i++)/*统计英语成绩不及格率*/
{
if(stu[i].Clanguage<60)
k++,
printf("不及格的分数为%d\n",stu[i].Clanguage);
}
printf("共%d人C语言成绩不及格\n",k);
printf(" **********************************************************");
}
int m;
printf("返回上一级菜单请按1,返回主菜单请按2,退出请按0: ");
scanf("%d", &m);
if (m == 0)
{
system("CLS");
system("color 0C");
out();
Sleep(1000);
exit(0);
}
if(m == 1){
infor_tongji2();
}
if (m == 2)
{
menue();
}
}
int main(int argc, char *argv[])
{
char result=' ';
char choice=' ';
char title[]="\t\t\t*********欢迎进入学生信息管理系统!********\n\n\n\n\n\n\n\t\t\t\t 2018年5月30日\n\n\n\n\n\n\n\t\t\t\t KangWenZhe\n";
//1:初始化窗口和界面
Window(title);
Sleep(3000);
lead *lea;
Node *head;
//申请一个管理员结点来保存管理员的信息
lea = (lead*)malloc(sizeof(lead));
//初始化数据链
head = (Node*)malloc(sizeof(Node));
head->next = NULL;
//尝试从文件中读取数据,也就是初始化数据函数
login();
return 0;
}
c语言学生管理系统(初步完成)
最新推荐文章于 2023-12-19 01:13:00 发布