要求是建立一个学生社团管理系统 其中主要的是基本信息和主要功能
(1) 学生社团基本信息包括: 社团编号(no)、社团名称(name)、社团类型(tupe)、 社团隶属院系(departments)、社团负责人(head)、 社团批准时间(approvaltime)、社团活动内容(content)、 社团简介(synopsis)、社团联系电话(telephone)等。 (2) 系统具有的功能 菜单方式选择功能; 社团信息录入,要求数据以文件形式保存; 社团信息浏览; 社团信息查询,查询方式可以是按社团编号、社团名称等方式查询; 社团信息的修改与删除。
**
第一个就是要建立一个结构体用来存储多名学生的多项信息
**
typedef struct
{
char no[11];
char name[18];
char tupe[10];
char departments[10];
char head[5];
char approvaltime[20];
char content[50];
char synopsis[50];
char telephone[15];
int i;
}Student;
Student stu[N];
其次是定义全局变量n
int n = 0;
接下来就是建立菜单函数,使系统功能以菜单方式工作
int menu()
{
int c;
do{
printf("\t========学生社团管理系统========\n\n");
printf("\t\t1. 输入学生社团信息\n");
printf("\t\t2. 输出学生社团信息\n");
printf("\t\t3. 查询学生社团信息\n");
printf("\t\t4. 删除学生社团信息\n");
printf("\t\t5. 插入学生社团信息\n");
printf("\t\t6. 学生社团信息排序\n");
printf("\t\t0. 退出系统\n\n");
printf("\t请选择:");
scanf("%d",&c);
}while(c<0||c>6);
return(c);
}
接着建立函数以用来输入学生社团信息
void Input()
{
char k,x[10];
while(k!='n'&&k!='N')
{
printf("输入社团编号:n=%d",n);
scanf("%s",&stu[n].no);
printf("输入社团名称:");
scanf("%s",&stu[n].name);
printf("输入社团类型:");
scanf("%s",&stu[n].tupe);
printf("输入社团隶属院系:");
scanf("%s",&stu[n].departments);
printf("输入社团负责人:");
scanf("%s",&stu[n].head);
printf("输入社团批准时间:");
scanf("%s",&stu[n].approvaltime);
printf("输入社团活动内容:");
scanf("%s",&stu[n].content);
printf("输入社团简介:");
scanf("%s",&stu[n].synopsis);
printf("输入社团联系电话:");
scanf("%s",&stu[n].telephone);
stu[n].i=1;
gets(x);
printf("输入下一个?(Y/N)\n");
scanf("%c",&k);
n++;
}
}
当然输入信息就有输出信息的函数啦
void Output()
{
int i;
printf("-------------------------------------------------------------------\n");
printf("编号 名称 类型 隶属院系 负责人 批准时间 活动内容 简介 联系电话\n");
printf("-------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n",stu[i].no,stu[i].name,stu[i].tupe,stu[i].departments,stu[i].head,stu[i].approvaltime,stu[i].content,stu[i].synopsis,stu[i].telephone);
printf("-------------------------------------------------------------------\n");
}
}
当我们有信息是错误或是需要删除的时候就需要一个删除信息的函数了
void Delete()
{
char x[8];
int j,i=0;
printf("输入要删除的社团名称:");
scanf("%s",x);
while(strcmp(stu[i].name,x)!=0&&i<n)
i++;
if(i==n)
{
printf("未找到相关学生社团信息!\n");
}
for(j=i;j<n-1;j++)
{
strcpy(stu[j].no,stu[j+1].no);
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j].tupe,stu[j+1].tupe);
strcpy(stu[j].departments,stu[j+1].departments);
strcpy(stu[j].head,stu[j+1].head);
strcpy(stu[j].approvaltime,stu[j+1].approvaltime);
strcpy(stu[j].content,stu[j+1].content);
strcpy(stu[j].synopsis,stu[j+1].synopsis);
strcpy(stu[j].telephone,stu[j+1].telephone);
}
n--;
printf("该学生社团信息已删除!\n");
}
要在茫茫海洋当中寻找属于我们的所要的那一滴水,让我们用一个查找函数来实现吧
void Findname()
{
char s[20];
int i=0;
printf("请输入要查询的学生社团名称:");
scanf("%s",&s);
while(strcmp(stu[i].name,s)!=0&&i<n)
i++;
if(i==n)
{
printf("未找到相关学生社团信息!\n");
}
printf("-------------------------------------------------------------------\n");
printf("编号 名称 类型 隶属院系 负责人 批准时间 活动内容 简介 联系电话\n");
printf("-------------------------------------------------------------------\n");
printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n",stu[i].no,stu[i].name,stu[i].tupe,stu[i].departments,stu[i].head,stu[i].approvaltime,stu[i].content,stu[i].synopsis,stu[i].telephone);
printf("-------------------------------------------------------------------\n");
}
void Findno()
{
char s[20];
int i=0;
printf("请输入要查询的学生学号:");
scanf("%s",&s);
while(strcmp(stu[i].no,s)!=0&&i<n)
i++;
if(i==n)
{
printf("未找到相关学生社团信息!\n");
}
printf("-------------------------------------------------------------------\n");
printf("编号 名称 类型 隶属院系 负责人 批准时间 活动内容 简介 联系电话\n");
printf("-------------------------------------------------------------------\n");
printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n",stu[i].no,stu[i].name,stu[i].tupe,stu[i].departments,stu[i].head,stu[i].approvaltime,stu[i].content,stu[i].synopsis,stu[i].telephone);
printf("-------------------------------------------------------------------\n");
}
然后就是插入信息的部分
void Insert()
{
int i,j;
printf("请输入要插入的位置:");
scanf("%d",&i);
if(i>n)
{
printf("输入社团编号:");
scanf("%s",&stu[n].no);
printf("输入社团名称:");
scanf("%s",&stu[n].name);
printf("输入社团类型:");
scanf("%s",&stu[n].tupe);
printf("输入社团隶属院系:");
scanf("%s",&stu[n].departments);
printf("输入社团负责人:");
scanf("%s",&stu[n].head);
printf("输入社团批准时间:");
scanf("%s",&stu[n].approvaltime);
printf("输入社团活动内容:");
scanf("%s",&stu[n].content);
printf("输入社团简介:");
scanf("%s",&stu[n].synopsis);
printf("输入社团联系电话:");
scanf("%s",&stu[n].telephone);
printf("学生社团信息输入成功!\n");
}
else
{
for(j=n-1;j>=i;j--)
{
strcpy(stu[j+1].no,stu[j].no);
strcpy(stu[j+1].name,stu[j].name);
strcpy(stu[j+1].tupe,stu[j].tupe);
strcpy(stu[j+1].departments,stu[j].departments);
strcpy(stu[j+1].head,stu[j].head);
strcpy(stu[j+1].approvaltime,stu[j].approvaltime);
strcpy(stu[j+1].content,stu[j].content);
strcpy(stu[j+1].synopsis,stu[j].synopsis);
strcpy(stu[j+1].telephone,stu[j].telephone);
}
printf("输入社团编号:");
scanf("%s",&stu[i].no);
printf("输入社团名称:");
scanf("%s",&stu[i].name);
printf("输入社团类型:");
scanf("%s",&stu[i].tupe);
printf("输入社团隶属院系:");
scanf("%s",&stu[i].departments);
printf("输入社团负责人:");
scanf("%s",&stu[i].head);
printf("输入社团批准时间:");
scanf("%s",&stu[i].approvaltime);
printf("输入社团活动内容:");
scanf("%s",&stu[i].content);
printf("输入社团简介:");
scanf("%s",&stu[i].synopsis);
printf("输入社团联系电话:");
scanf("%s",&stu[i].telephone);
printf("学生社团信息输入成功!\n");
}
n++;
}
要是没有排序的话,那不就乱成一锅粥了
void Rank()
{
int i,j;
char x[20],y[20],z[20],r[20],t[20],w[20],p[50],q[50],m[20];
printf("正在根据学生学号进行排序,请稍后...\n");
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(strcmp(stu[j].no,stu[j+1].no)>0)
{
strcpy(x,stu[j].no);
strcpy(stu[j].no,stu[j+1].no);
strcpy(stu[j+1].no,x);
strcpy(y,stu[j].name);
strcpy(stu[j].name,stu[j+1].name);
strcpy(stu[j+1].name,y);
strcpy(z,stu[j].tupe);
strcpy(stu[j].tupe,stu[j+1].tupe);
strcpy(stu[j+1].tupe,z);
strcpy(r,stu[j].departments);
strcpy(stu[j].departments,stu[j+1].departments);
strcpy(stu[j+1].departments,r);
strcpy(t,stu[j].head);
strcpy(stu[j].head,stu[j+1].head);
strcpy(stu[j+1].head,t);
strcpy(w,stu[j].approvaltime);
strcpy(stu[j].approvaltime,stu[j+1].approvaltime);
strcpy(stu[j+1].approvaltime,w);
strcpy(p,stu[j].content);
strcpy(stu[j].content,stu[j+1].content);
strcpy(stu[j+1].content,p);
strcpy(q,stu[j].synopsis);
strcpy(stu[j].synopsis,stu[j+1].synopsis);
strcpy(stu[j+1].synopsis,q);
strcpy(m,stu[j].telephone);
strcpy(stu[j].telephone,stu[j+1].telephone);
strcpy(stu[j+1].telephone,m);
}
}
下面就是一些小函数了
int Find()
{
int i;
printf("\t\t1.按社团名称查询\n");
printf("\t\t2.按社团编号查询\n");
scanf("%d",&i);
return i;
}
void load()
{
FILE* input;
input=fopen("data.dat","rb");
fread(&stu,sizeof(stu),1,input);
fclose(input);
int i=0;
for(i=0;i<N;i++){
if(stu[i].i>0)
n++;
else
break;
}
}
void save()
{
stu[n].i=0;
FILE* output;
output=fopen("data.dat","wb");
fwrite(&stu,sizeof(stu),1,output);
fclose(output);
}
最后就是主函数啦
int main()
{
load();
for(;;)
{
for(;;)
{
int n=0;
switch(menu())
{
case 1:Input();Output();break;
case 2:Output();break;
case 3:
switch(Find())
{
case 1:Findname();break;
case 2:Findno();break;
} break;
case 4:Delete();break;
case 5:Insert();break;
case 6:Rank();Output();break;
case 0:save();exit(0);break;
default:printf("*输入错误!*");break;
}
}
}
}
有许多需要改进的地方大家尽管提出来
|