|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//-------类型定义----------
struct Student{
char num[15];//学号
char name[15];//姓名
char major[10];//专业(computer,software,network)
int classNo;//班级(1-2)
int score[3];//3门课的成绩(0-2)
};
typedef struct Student STU;
//-------函数声明----------
void InputStudent(STU * p);
void Output(STU * p);
void SaveStudent(STU * p, int n);
void LoadStudent(STU * p, int n);
void Input(STU * p, int n);
void Sort_insert(STU *p, int n, char *major);
//-------主函数开始--------
#define N 2 //为了输入简单,数组长度定义为3
int main()
{ int k, j ,n ,x ,id;
char a[10];
STU students[N];
STU tem[N];
STU arrange[N];
while(1) {
printf("\n请输入功能编号,运行系统相应功能\n");
printf("1-输入信息;2-文件存盘;3-打开文件; 4-输出文件; 5-对指定专业的指定科目进行排序\n");
scanf("%d", &id);
switch (id) {
case 1:
{
for (j=0; j<N; j++) {
InputStudent(students+j); //输入信息
}
break;
}
case 2:
{ getchar();//避免将输入2后的回车当文件名
SaveStudent(students, 10);//存到文件
break;
}
case 3:
{
printf("\n请输入您想取出文件中的前几个结构体信息(<%d)?\n", n);
scanf("%d", &n);
getchar();
Input(tem,n); //从文件读
break;
}
case 4:
{
for (j=0; j<n; j++) {
Output(tem+j);//输出信息
}
break;
}
case 5:
{
printf("\n请输入您想查找排名的专业:");
scanf("%s", a);
getchar();
printf("\n请输入您想查找排名的科目(0,1,2):");
scanf("%d", &x);
getchar();
Sort_insert(tem, x, a);
break;
}
default:
{
break;
}
}
if ((id<1)||(id>5))
break; //break while
}
}
//--――――――---输入函数----------
void InputStudent(STU * p) {
int i;int classNo;
printf("\n请输入学号,回车结束:");
scanf("%s",p->num);
getchar();
printf("\n请输入姓名字符串,回车结束: ");
gets(p->name);
printf("\n请输入专业(computer,software,network)。回车结束:");
gets(p->major);
printf("\n请输入班级,回车结束:");
scanf("%d",&p->classNo);
getchar();
printf("\n请输入三门课的整数成绩,每门成绩以回车结束:\n");
for (i=0; i<3; i++) {
scanf("%d",&p->score[i]);
getchar();
}
}
//----------写文件函数---------------
void SaveStudent(STU * p, int n)
{
FILE *fp;
char filename[20];
int i;
printf("\n请输入保存文件名:\n");
gets(filename);
if ((fp=fopen(filename, "wb"))==NULL) { //创建二进制文件
printf("cannot open file\n");
return;
}
for (i=0; i<n; i++){
if (fwrite(p++, sizeof(Student), 1, fp)!=1)//向文件中一次写一个结构体量值
printf("file write error\n");
}
fclose(fp);
}
void Input(STU * p, int n)
{
FILE *fp;
char filename[20];
printf("\n请输入打开文件名:\n");
gets(filename);
fp=fopen(filename, "rb");//打开二进制文件
fread(p, sizeof(STU), n, fp);//从文件中一次读n个结构体量值
fclose(fp);
}
void Output(STU *p) {
printf("\n%s\t%s\t%s\t%d\t%d\t%d\t%d\n", p->num, p->name, p->major, p->classNo, p->score[0], p->score[1], p->score[2]);
}
int i,j,k,t,a[N];
STU T;
void Sort_insert(STU *p, int n, char *major)
{
a[N];
for(i=0; i<N; i++)
{
a[i]=(p+i)->score[n];
}
for (i = 1; i < N; i++)
{
t = a[i];
j = i - 1;
for ( ; j >= 0 && a[j] > t; j--)
{
a[j+1] = a[j];
}
a[j+1] = t;
T = *(p+i);
for(k=i; k>j; k--)
{
*(p+k) = *(p+k-1);
}
*p(j+1) = T;
}
for(j=0; j<N; j++)
{
if(strcmp((p+j)->major, major) == 0)
{
Output(p+j);
}
}
}
160 23 C:\Users\29577\Desktop\未命名1.cpp [Error] 'p' cannot be used as a function
注:如果去掉case 5其他功能可以正常运行。此程序case5得先打开文件后进入缓存区才能排序。
我怀疑是指针的问题,应该是Sort_insert函数的错误。case5用到了Sort_insert函数,所以你去掉case5才会正常运行。
|
|