/*
1、从文本文件中导入班级学生信息:学号、姓名、性别、籍贯
2、将学号重复的删除
3、显示导入的学生信息
4、按学号、姓名、性别、籍贯相等和不相等查找
5、多次查找
6、查找结果写入文件
7、VC++6.0编译通过
//以下代码存为main.cpp
*/
#include <stdio.h>
#include <malloc.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define CLRSCR system("cls")
#define PRINT_TITLE "\n序号\t学号\t\t姓名\t性别 \t籍贯\n"
#define PRINT_FORMAT "%d\t%s\t%s\t%s\t%s\n",i,p->stu.num,p->stu.name,p->stu.sex,p->stu.hometown
#define WRITE_FORMAT "%s\t%s\t%s\t%s\n",p->stu.num,p->stu.name,p->stu.sex,p->stu.hometown
#define READ_FORMAT "%s %s %s %s",&p->stu.num,&p->stu.name,&p->stu.sex,&p->stu.hometown
//定义学生结构体
struct student
{
char num[9];
char name[7];//三个汉字长度为6个字节,如果不多定义一个字节来存放字符串结束符'\0',当输出name时会把sex和hometown也输出
char sex[3];
char hometown[7];
};
//定义单链表结点
typedef struct listnode
{
struct student stu;
struct listnode *next;
}node;
int MySelect(node * head,node *temp) //返回查找到符合条件的项目数
{
int equal,N;
char CHAR[10];
printf("----------------------------------------------\n\n");
printf("查找模式:1是相等查找,0是不相等查找\n");
printf("列名编号:1是学号,2是姓名,3是性别,4是籍贯\n");
printf("\n--------------------------------------------\n");
do
{
printf("\n选择查找模式:");//用scanf时输入字母会错误 改用getche,不用scanf
equal=getche();
if((equal!='1')&&(equal!='0'))
printf("\n\t输入错误\n");
}
while((equal!='1')&&(equal!='0'));
equal=equal-48;
do
{
printf("\n输入列名编号:");
N=getche();
if(N!='1'&&N!='2'&&N!='3'&&N!='4')
printf("\n\t输入错误\n");
}
while(N!='1'&&N!='2'&&N!='3'&&N!='4');
switch(N)
{
case '1': N=0;break;
case '2': N=9;break;
case '3': N=16;break;
case '4': N=19;break;
}
printf("\n输入关键字:");
scanf("%s