// testzhidao4.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
#include
#include
#include
struct Student //学生结构体
{
char name[20]; //名字
char sex[10]; //性别
char zuanye[20]; //专业
char code[13]; //学号
char department[20]; //学院
char degree[20]; //稿缓学历
};
struct node
{
struct Student data;
struct node *next;
};
//---------------------------------------------------------------------------------
void print_menu(void) // 打印总菜单
{
printf(" |--------------------------------------------------|\n");
printf(" | 总 菜 单 : |\n");
printf(" |--------------------------------------------------|\n");
printf(" | 1--增加一个学生信息 | 5--删除一个学生信息 |\n");
printf(" | 2--显示一个学生信息 | 6--统计功能 |\n");
printf(" | 3--显示一个班级信息 | 7--结束 |\n"羡则);
printf(" | 4--修改一个学生信息 | \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 |\n");
printf(" |--------------------------------------------------|\n");
}
void print_menu4(void ) //打印修改功能
{
printf(" |--------------------------------------------------|\n");
printf(" | 修 改 功 能 : |\n");
printf(" |--------------------------------------------------|\n");
printf(" | 1--修改名字 | 5--修改学院 |\n");
printf(" | 2--修改性别 | 6--修改专业 |\n");
printf(" | 3--修改学号 | 7--不作修改 |\n");
printf(" | 4--修改学历 | \3 \3 \兄敬棚3 \3 \3 \3 \3 \3 \3 \3 \3 |\n");
printf(" |--------------------------------------------------|\n");
printf("再次选择选项 :");
}
void print_static_function_menu(void) //打印统计功能
{
printf(" |--------------------------------------------------|\n");
printf(" | 统 计 功 能 : |\n");
printf(" |--------------------------------------------------|\n");
printf(" | 1.男/女人数 | 3.一个专业人数 |\n");
printf(" | 2.一个班级人数 | 4.结束 |\n");
printf(" |--------------------------------------------------|\n");
printf("请选择选项:\n");
}
int compareCode(char a[],char b[]) //比较 判断是否是同一个班级
{
for(int i=0;i<9;i++)
if(a[i]!=b[i]) break;
if(i==9) return 1;
else return 0;
}
//-------------------------------------------------------------------------------------
void main() //主函数从这里开始
{
system("color 3");
printf("\n\n\n");
printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3\3\3\3\3 学 生 证 管 理 程 序 \3\3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3 作者: \3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
int choice;
struct node *studentlist=(struct node*)malloc(sizeof(struct node)); //学生链表头 //////////////////////////////////////////////////////////
studentlist->next=NULL;
struct node *temp=NULL;
struct node *p=(struct node*)malloc(sizeof(struct node));
char tempcode[13]; //临时学号
char tempclass[11]; //临时班级
char tempzuanye[20];//临时专业
int count=0;
int choice6,count_male,count_female;
const int sizeStu=sizeof(struct Student);
struct Student data;
FILE *fp;
if((fp=fopen("d:\\学生证管理程序.dat","rb"))==NULL)
{
fp=fopen("d:\\学生证管理程序.dat","wb");
}
fclose(fp);
fp=fopen("d:\\学生证管理程序.dat","rb");
while(fread(&data,sizeStu,1,fp)==1)
{
p->data=data;
p->next=NULL;
if(studentlist==NULL)
studentlist=p;
else
{ temp=studentlist;
while(temp->next!=NULL){temp=temp->next;}
temp->next=p;
}
p=(struct node*)malloc(sizeof(struct node));
}
fclose(fp);
print_menu(); //打印菜单
scanf("%d",&choice); //读进选项
while(choice!=7) //未遇到结束键
{
switch(choice)
{
//----------------------------------------------------------------
//选项1,增加学生学生证信息
case 1: //输入一个学生信息
p=(node*) malloc(sizeof(node));
printf("\n请输入姓名:");
scanf("%s",p->data.name);
printf("\n请输入性别(男/女):");
scanf("%s",p->data.sex);
printf("\n请输入学号(12位):");
scanf("%s",p->data.code);
printf("\n请输入学制(本科生/研究生):");
scanf("%s",p->data.degree);
printf("\n请输入学院:");
scanf("%s",p->data.department);
printf("\n请输入专业:");
scanf("%s",p->data.zuanye);
p->next=NULL;
//----------------------------------------------------------链表连接
if(studentlist==NULL) { studentlist=p; studentlist->next=NULL;}
else {
temp=studentlist;
while(temp->next!=NULL) ////////////////////
{
temp=temp->next;
}
temp->next=p;
p->next=NULL;
}
break;
//---------------------------------------------------------------------
//选项2,显示给定学生学生证信息
case 2: printf("\n请输入学生学号(12位数):");
scanf("%s",tempcode);
temp=studentlist;
while(temp!=NULL) //寻找响应的学生
{
if(strcmp(tempcode,temp->data.code)==0) break;
temp=temp->next;
}
if(temp==NULL) printf("\n不能找到该学生信息.\n");
else {
printf("------------------------------------------------\n");
printf("姓名: %s\n",temp->data.name);
printf("性别: %s\n",temp->data.sex);
printf("学号: %s\n",temp->data.code);
printf("学历: %s\n",temp->data.degree);
printf("学院: %s\n",temp->data.department);
printf("专业: %s\n",temp->data.zuanye);
printf("------------------------------------------------\n\n");
}
break;
//-----------------------------------------------------------------
//选项3,显示给定班级的学生信息
case 3:printf("\n请输入班级号 :"); //输入班级号
scanf("%s",tempclass);
while(strlen(tempclass)<10) //班级号位数小于10时,重新输入
{
printf("错误的班级号,请重新输入:");
scanf("%s",tempclass);
}
count=0; //班级学生数
temp=studentlist;
while(temp!=NULL) //检索链表,并打印相应学生的学生证信息
{
if(compareCode(tempclass,temp->data.code)) {//打印属于这个班级的学生
printf("-----------------------------------------------\n");
printf("姓名: %s\n",temp->data.name);
printf("性别: %s\n",temp->data.sex);
printf("学号: %s\n",temp->data.code);
printf("学历: %s\n",temp->data.degree);
printf("学院: %s\n",temp->data.department);
printf("专业: %s\n",temp->data.zuanye);
printf("-----------------------------------------------\n");
count++;
}
temp=temp->next;
}
if(count==0) printf("该班级还未有成员.\n");
break;
//-------------------------------------------------------------------
//选项4,修改给定学生的信息
case 4: printf("请输入要作修改的学生证号:");
scanf("%s",tempcode);
temp=studentlist;
while(temp!=NULL) //寻找响应的学生
{
if(strcmp(tempcode,temp->data.code)==0) break;
temp=temp->next;
}
if(temp==NULL) printf("\n找不到相应学生的信息.\n");//找不到相应的学生
else {
int choice2;
print_menu4();
scanf("%d",&choice2);
while(choice2!=7)
{
switch(choice2)
{
case 1:printf("修改名字:"); //修改名字
scanf("%s",temp->data.name);
break;
case 2:printf("修改性别:");//修改性别
scanf("%s",temp->data.sex);
break;
case 3:printf("修改学号:");//修改学号
scanf("%s",temp->data.code);
break;
case 4:printf("修改学历 :"); //修改学历
scanf("%s",temp->data.degree);
break;
case 5:printf("修改学院:"); //修改学院
scanf("%s",temp->data.department);
case 6:printf("修改专业:");//修改专业
scanf("%s",temp->data.zuanye);
break;
default: break;
}
printf("请选择选项:");
scanf("%d",&choice2); //再次选择菜单选项
}
}
break;
//----------------------------------------------------------------
//选项5,删除给定学号的学生
case 5: printf("\n输入学号 :"); //输入学号
scanf("%s", tempcode);
temp=studentlist;
p=temp;
while(temp!=NULL) //寻找相应的学生
{
if(strcmp(tempcode,temp->data.code)==0) break;
p=temp;
temp=temp->next;
}
if(temp==NULL) printf("\n找不到该学生信息.\n"); //找不到
else if(temp==studentlist) {studentlist=temp->next; free(temp);}
else {
p->next=temp->next;//找到时删除
free(temp);
}
break;
//------------------------------------------------------------------
//选项6,统计功能
case 6: print_static_function_menu();
scanf("%d",&choice6);//选择菜单选项
while(choice6!=4)
{
switch(choice6)
{
//选项1,统计男女个数
case 1:temp=studentlist;
count_male=0; //男生数
count_female=0; //女生数
while(temp!=NULL) //检索链表查找
{
if(strcmp(temp->data.sex,"男")==0) count_male++;
if(strcmp(temp->data.sex,"女")==0) count_female++;
temp=temp->next;
}
printf("男: %d\n",count_male);
printf("女: %d\n",count_female);
break;
//选项2,统计给定班级的人数
case 2:printf("请输入班级号:");
scanf("%s",tempclass); //给定班级
temp=studentlist;
count=0;
while(temp!=NULL) //检索链表查找
{
if(compareCode(temp->data.code,tempclass)==1) count++;
temp=temp->next;
}
printf("%s班级总人数为: %d\n",tempclass,count);
break;
case 3:printf("请输入专业:");
scanf("%s",tempzuanye); //给定专业
temp=studentlist;
count=0;
while(temp!=NULL) //检索链表查找
{
if(strcmp(temp->data.zuanye,tempzuanye)==0) count++;
temp=temp->next;
}
printf("%s专业总人数为: %d\n",tempzuanye,count);
break;
//缺省项
default: break;
}
printf("请选择选项:");
scanf("%d",&choice6);
}
break;
//-----------------------------------------------------------------
default:free(p); break;
}
if((fp=fopen("d:\\学生证管理程序.dat","wb"))==NULL)
{
printf("文件无法打开!");
return;
}
p=studentlist;
while(p)
{
fwrite(&p->data,sizeStu,1,fp);
p=p->next;
}
fclose(fp);
print_menu( );//打印菜单 进入循环
scanf("%d",&choice);
}
}