#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define HEADER1 "|-----------------------------------------------------------------------------------学生信息管理系统--------------------------------------------------------------------------------------|\n"
#define HEADER2 "| 学号 | 姓名 | 年龄 | 性别 | 出生年月 | 地址 | 电话 | email | 高数成绩 | 大学英语成 | c语言成绩 |\n"
#define HEADER3 "|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n"
#define FORMAT "|%-13s |%-8s |%-4s |%-4s |%-10s |%-38s |%-13s |%-16s |%-8s |%-6s |%-6s |\n"
#define DATA p->number,p->name,p->age,p->sex,p->birth,p->address,p->phone,p->email,p->math,p->english,p->c
#define END "|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n"
#define MAX_NUM 50
#define SUCCESS 0
int saveflag=0;
void Refresh()
{
system("cls");
}
typedef struct student
{
char number[20];
char name[20];
char age[10];
char sex[10];
char birth[15];
char address[50];
char phone[20];
char email[20];
char math[10];
char english[10];
char c[10];
}stu;
int Filehandle(struct student * s[],int * pn)
{
FILE * fp;
int num=0;
struct student * p;
fp=fopen("C:\\Users\\lenovo\\Desktop\\高级语言程序设计实践课\\st","ab+");
if(fp==NULL)
{
printf("\n=====>Can not open file!\n");
exit(0);
}
while(!feof(fp)&&num<MAX_NUM)
{
p=(struct student *)malloc(sizeof(struct student));
if(!p)
{
printf(" Memory malloc faileure! \n");
exit(0);
}
if(fread(p,sizeof(struct student),1,fp)==1)
{
s[num]=p;
num++;
}
}
*pn=num;
fclose(fp);
printf("\n=====>Open file success,the total number of records is:%d.\n",num);
return SUCCESS;
}
void printheader()
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
void printdata(struct student * p)
{
printf(FORMAT,DATA);
}
void Nofind()
{
printf("\n=====>没有找到该学生!\n");
}
void Disp(struct student * s[],int num)
{
int i;
struct student * p;
if(num==0)
{
printf("\n=====>没有学生信息!\n");
system("pause");
return;
}
printf("\n\n");
printheader();
for(i=0;i<num;i++)
{
p=s[i];
printdata(p);
printf(HEADER3);
}
}
int Locate(struct student * s[],int num,char findmess[],char nm[])
{
struct student * r;
int i=0;
if(strcmp(nm,"name")==0)
{
while(i<num)
{
r=s[i];
if(strcmp(r->name,findmess)==0)
return i;
i++;
}
}
else if(strcmp(nm,"number")==0)
{
while(i<num)
{
r=s[i];
if(strcmp(r->number,findmess)==0)
return i;
i++;
}
}
exit(0);
}
void stringinput(char * t,int lens,char * notice)
{
char n[255];
do
{
printf(notice);
scanf("%s",n);
if(strlen(n)>(unsigned)lens)printf("\n exceed the requirednlength! \n");
}
while(strlen(n)>(unsigned)lens);
strcpy(t,n);
}
void Add(struct student * s[],int * pn)
{
struct student * p;
char ch,number[20];
int num=* pn;
system("cls");
Disp(s, * pn);
while(1)
{
stringinput(number,20,"输入学号(输入0来返回菜单):");
if(strcmp(number,"0")==0)
return;
if(num>=MAX_NUM)
{
printf("学生数量已达最大%d!!!",MAX_NUM);
return;
}
p=(struct student *)malloc(sizeof(struct student));
if(!p)
{
printf("\n 申请内存空间失败!\n");
return;
}
strcpy(p->number,number);
stringinput(p->name,20,"姓名:");
stringinput(p->age,10,"年龄:");
stringinput(p->sex,10,"性别:");
stringinput(p->birth,15,"出生年月:");
stringinput(p->address,50,"地址:");
stringinput(p->phone,20,"电话:");
stringinput(p->email,20,"Email:");
stringinput(p->math,10,"高数成绩:");
stringinput(p->english,10,"大学英语成绩:");
stringinput(p->c,10,"C语言成绩:");
getchar();
printf("=====>是否保存本条记录?(y/n):");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
saveflag=1;
else
saveflag=0;
if(saveflag==1)
{
s[num]=p;
num++;
(*pn)++;
}
else
{
free(p);
}
}
return;
}
void Find(struct student * s[],int num)
{
int select;
int i;
char searchinput[20];
struct student * p;
if(num==0)
{
system("cls");
printf("\n=====>没有数据!\n");
system("pause");
getchar();
return;
}
while(1)
{
system("cls");
printf(" |----------------------|\n");
printf(" |-----1.按学号查询-----|\n");
printf(" |-----2.按姓名查询-----|\n");
printf(" |-----3.退出本菜单-----|\n");
printf(" |----------------------|\n");
printf(" 请输入操作编号:");
scanf("%d",&select);
if(select==1)
{
stringinput(searchinput,20,"请输入学号:");
i=Locate(s,num,searchinput,"number");
if(i>=0)
{
printheader();
for(i=0;i<num;i++)
{
p=s[i];
if(strcmp(p->number,searchinput)==0)
{
printdata(p);
}
}
printf(END);
printf("返回");
}
else
Nofind();
getchar();
}
else if(select==2)
{
stringinput(searchinput,20,"请输入姓名:");
i=Locate(s,num,searchinput,"name");
if(i>=0)
{
printheader();
for(i=0;i<num;i++)
{
p=s[i];
if(strcmp(p->name,searchinput)==0);
{
printdata(p);
}
}
printf(END);
printf("返回");
}
else
Nofind();
getchar();
}
else if(select==3)
{
return;
}
else
printf("输入有误,请输入正确的操作编号(1~3)\n");
system("pause");
}
}
void Delt(struct student * s[],int * pn)
{
int i,j;
struct student * p;
char findmess[20];
if(*pn==0)
{
system("cls");
printf("\n=====>没有数据!\n");
getchar();
return;
}
while(1)
{
system("cls");
Disp(s, *pn);
printf(" |----------------------------|\n");
printf(" |-----1.删除所有学生信息-----|\n");
printf(" |-----2.查找学号删除信息-----|\n");
printf(" |-----3.退出本菜单-----------|\n");
printf(" |----------------------------|\n");
printf(" 请输入操作编号:");
scanf("%d",&j);
if(j==1)
{
for(i=0;i<*pn;i++)
{
p=s[i];
if(p)
free(p);
}
*pn=0;
printf("\n=====>删除所有学生信息成功!\n");
getchar();
saveflag=1;
}
else if(j==2)
{
stringinput(findmess,20,"请输入要删除的学生信息学号:");
i=Locate(s,*pn,findmess,"number");
if(i>=0)
{
p=s[i];
free(p);
for(;i<*pn-1;i++)
{
s[i]=s[i+1];
}
(*pn)--;
printf("\n=====>删除成功!\n");
getchar();
saveflag=1;
}
}
else if(j==3)
{
return;
}
else
printf("输入有误,请输入正确的操作编号(1~3)\n");
system("pause");
}
}
void Modify(struct student * s[],int num)
{
struct student * p;
int i;
char findmess[20];
if(num<0)
{
system("cls");
printf("=====>没有数据!\n");
getchar();
return;
}
system("cls");
printf("修改学生信息");
Disp(s,num);
stringinput(findmess,20,"输入要修改的学生学号:");
i=Locate(s,num,findmess,"number");
if(i>=0)
{
p=s[i];
printf("姓名:%s,",p->name);
stringinput(p->name,20,"请输入新的姓名:");
printf("年龄:%s,",p->age);
stringinput(p->age,10,"请输入新的年龄:");
printf("性别:%s,",p->sex);
stringinput(p->sex,10,"请输入新的性别:");
printf("出生年月:%s,",p->birth);
stringinput(p->birth,15,"请输入新的出生年月:");
printf("地址:%s,",p->address);
stringinput(p->address,50,"请输入新的地址:");
printf("电话:%s,",p->phone);
stringinput(p->phone,20,"请输入新的电话:");
printf("email:%s,",p->email);
stringinput(p->email,20,"请输入新的email:");
printf("高数成绩:%s,",p->math);
stringinput(p->math,10,"请输入新的高数成绩:");
printf("大学英语成绩:%s,",p->english);
stringinput(p->english,10,"请输入新的大学英语成绩:");
printf("c语言成绩:%s,",p->c);
stringinput(p->c,10,"请输入新的c语言成绩:");
printf("\n=====>修改成功");
Disp(s,num);
saveflag=1;
}
else
Nofind();
return;
}
void Count(int num)
{
system("cls");
printf("目前学生信息数量为:%d.\n",num);
getchar();
getchar();
}
void Sort(struct student * s[],int num)
{
struct student * temp;
int i,j;
system("cls");
Disp(s,num);
if(num==0)
return;
for(i=0;i<num-1;i++)
for(j=i+1;j<num;j++)
{
if(strcmp(s[i]->number,s[j]->number)>0);
{
temp=s[j];
s[j]=s[i];
s[i]=temp;
}
}
Disp(s,num);
saveflag=1;
printf("\n=====>排序完成!");
system("pause");
}
void Save(struct student * s[],int num)
{
FILE *fp;
struct student * p;
int count=0;
fp=fopen("C:\\Users\\lenovo\\Desktop\\高级语言程序设计实践课\\st","wb");
if(fp==NULL)
{
printf("\n=====>打开文件失败!\n");
getchar();
return;
}
for(count=0;count<num;count++)
{
p=s[count];
if(fwrite(p,sizeof(struct student),1,fp)!=1)
{
printf("写入失败!\n");
break;
}
}
if(count>0)
{
getchar();
printf("\n\n\n\n\n====>保存学生信息成功,保存的学生信息数为:%d\n",count);
}
else
{
system("cls");
printf("数据为空,保存文档成功!\n");
}
saveflag=0;
getchar();
fclose(fp);
}
void Myexit(struct student * s[],int num)
{
char ch;
if(saveflag==1)
{
getchar();
printf("\n=====>是否保存信息进入数据库?(y/n):");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(s,num);
}
printf("\n=====>即将退出系统,感谢您的使用!\n");
}
void Menu()
{
system("color f2");
system("cls");
printf(" 欢迎使用学生信息管理系统! \n");
printf(" |-------------------------------------------------| \n");
printf(" | 系统功能菜单 | \n");
printf(" |-------------------------------------------------| \n");
printf(" | 0.系统帮助及说明 | 1.刷新系统页面 | \n");
printf(" |-------------------------------------------------| \n");
printf(" | 2.查询学生信息 | 3.统计学生信息 | \n");
printf(" |-------------------------------------------------| \n");
printf(" | 4.添加学生信息 | 5.删除学生信息 | \n");
printf(" |-------------------------------------------------| \n");
printf(" | 6.修改学生信息 | 7.保存学生信息 | \n");
printf(" |-------------------------------------------------| \n");
printf(" | 8.显示所有信息 | 9.排序学生信息 | \n");
printf(" |-------------------------------------------------| \n");
printf(" | 10.退出系统 | | \n");
printf(" |-------------------------------------------------| \n");
}
void Help()
{
printf("\n");
printf("一、系统介绍:本系统是从学生信息管理的现状出发,根据学生管理的新要求进行设计研究的,它主要帮助管理人员有效管理学生信息。\n");
printf("二、本系统主要实现以下功能:1.学生信息录入;2.学生信息查询;3.学生信息的增删;4.学生信息的修改。\n");
printf("三、操作注意事项:操作时选择你要执行的操作编号即可,退出系统时请及时保存数据!!!");
printf("感谢您的使用!\n");
printf("\n");
system("pause");
}
void main()
{
int select;
int num=0;
struct student * s[MAX_NUM];
if(Filehandle(s,&num)!=SUCCESS)
exit(0);
while(1)
{
Menu();
printf("请输入你要执行的操作编号:");
scanf("%d",&select);
switch(select)
{
case 0:Help();break;
case 1:Refresh();break;
case 2:Find(s,num);break;
case 3:Count(num);break;
case 4:Add(s,&num);break;
case 5:Delt(s,&num);break;
case 6:Modify(s,num);break;
case 7:Save(s,num);break;
case 8:system("cls");Disp(s,num);system("pause");break;
case 9:Sort(s,num);break;
case 10:Myexit(s,num);return;
default:printf("输入有误,请输入正确操作编号!(0`7)\n");
system("pause");
}
}
}

请问为什么我的代码无警告错误,却运行不出结果
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- fuill 2021-12-30 19:57关注
运行后显示什么
测试可以打开界面的本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用