向高手求解一个C语言编程题:

学生信息管理系统设计
学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:
1、系统以菜单方式工作
2、学生信息录入功能(学生信息用文件保存)--输入
3、学生信息浏览功能--输出
4、学生信息查询功能--算法
按学号查询
按姓名查询
5、学生信息的删除与修改(可选项)

你是哪的啊?怎么和我们的一样啊?必须告诉我,是一个学校的就告诉你了!这个就是完整的程序!你就不用改了!
#include <stdio.h>
#include <io.h>
#include <stdlib.h>
#include <string.h>
#define MAX 200
struct student
{
char no[10]; // 学号
char name[50]; // 姓名
int age; //年龄
char sex[100]; //性别
char birthday[50];//出生年月
char address[50]; //地址
char phone[50]; //电话
char mail[50]; //E-mail
};
struct data
{
int count; // 当前学生数组中学生的个数
struct student stu[MAX]; // 学生数组
} dd;

// 显示主菜单
void menu()
{
system("cls");
printf("\n");
printf("\t\t\t********************************\n");
printf("\t\t\t* *\n");
printf("\t\t\t* 学生信息管理系统 *\n");
printf("\t\t\t* *\n");
printf("\t\t\t* [0] 退出 *\n");
printf("\t\t\t* [1] 查看所有学生信息 *\n");
printf("\t\t\t* [2] 输入学生信息 *\n");
printf("\t\t\t* [3] 删除学生记录 *\n");
printf("\t\t\t* [4] 修改学生记录 *\n");
printf("\t\t\t* [5] 查询(学号) *\n");
printf("\t\t\t* [6] 查询(姓名) *\n");
printf("\t\t\t********************************\n");
}

// 等待用户按回车后回到主菜单
void to_menu()
{
char c1,c2;

printf("\n\n\n按回车键返回主菜单...");
scanf("%c%c",&c1,&c2);
menu();
}

// 查看所有学生信息
void view_data()
{
int i;
printf("学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tmail");
printf("\n-------------------------------------------------------------------\n");
for(i=0;i<dd.count;i++)
printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n",dd.stu[i].no,dd.stu[i].name,dd.stu[i].age,dd.stu[i].sex,dd.stu[i].birthday,dd.stu[i].address,dd.stu[i].phone,dd.stu[i].mail);
printf("\n");
}

// 将数据从结构体数组保存到文件中
void save_data()
{
FILE *fp;
int i,k;
k=dd.count;
fp=fopen("c:/dada.txt","w");
fwrite(&k,sizeof(int),1,fp);
for(i=0;i<k;i++)
fwrite(&dd.stu[i],sizeof(struct student),1,fp);
fclose(fp);
}

// 输入学生记录
void add_data()
{
struct student st;
int b;
int k;
while(1)
{
printf("\n请输入学生信息:");
printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tmail");
printf("\n---------------------------------------------------------------\n");
scanf("%s%s%d%s%s%s%s%s",st.no,st.name,&st.age,st.sex,st.birthday,st.address,st.phone,st.mail);
k = dd.count;
strcpy(dd.stu[k].no,st.no);
strcpy(dd.stu[k].name,st.name);
dd.stu[k].age=st.age;
strcpy(dd.stu[k].sex,st.sex);
strcpy(dd.stu[k].birthday,st.birthday);
strcpy(dd.stu[k].address,st.address);
strcpy(dd.stu[k].phone,st.phone);
strcpy(dd.stu[k].mail,st.mail);
dd.count++;
printf("\n\n继续添加学生信息[1-yes 0-no]:");
scanf("%d",&b);
if(b==0) break;
}
save_data();
}

// 将数据从文件读到结构体数组中
void read_data()
{
FILE *fp;
int i,k;
struct student st;
k=0;
if(access("c:/dada.txt",0)==-1) // 如果文件不存在
{
fp=fopen("c:/dada.txt","w");
fwrite(&k,sizeof(int),1,fp);
fclose(fp);
}

fp=fopen("c:/dada.txt","r");
fread(&k,sizeof(int),1,fp);
dd.count=k;
for(i=0;i<k;i++)
{
fread(&st,sizeof(struct student),1,fp);
strcpy(dd.stu[i].no,st.no);
strcpy(dd.stu[i].name,st.name);
dd.stu[i].age=st.age;
strcpy(dd.stu[i].sex,st.sex);
strcpy(dd.stu[i].birthday,st.birthday);
strcpy(dd.stu[i].address,st.address);
strcpy(dd.stu[i].phone,st.phone);
strcpy(dd.stu[i].mail,st.mail);
}
fclose(fp);
}

// 删除学生记录
void delete_data()
{
int i,k;
char no[10];
printf("\n请输入要删除学生的学号:");
scanf("%s",no);
k=-1;
for(i=0;i<dd.count;i++)
{
if(strcmp(dd.stu[i].no,no)==0)
{
k=i;
break;
}
}
if(k==-1)
{
printf("\n\n没有找到该学生(学号-%s)!",no);
}
else
{
for(i=k;i<dd.count-1;i++)
{
strcpy(dd.stu[i].no,dd.stu[i+1].no);
strcpy(dd.stu[i].name,dd.stu[i+1].name);
dd.stu[i].age=dd.stu[i].age;
strcpy(dd.stu[i].sex,dd.stu[i+1].sex);
strcpy(dd.stu[i].birthday,dd.stu[i+1].birthday);
strcpy(dd.stu[i].address,dd.stu[i+1].address);
strcpy(dd.stu[i].phone,dd.stu[i+1].phone);
strcpy(dd.stu[i].mail,dd.stu[i+1].mail);
}
dd.count--;
save_data();
printf("\n\n删除(学号-%s)成功!",no);
}
}

// 修改学生信息
void edit_data()
{
int i,k,age;
char no[10],name[50],sex[50],birthday[50],address[50],phone[50],mail[50];
printf("\n请输入要修改学生信息的学号:");
scanf("%s",no);
k=-1;

for(i=0;i<dd.count;i++)
{
if(strcmp(dd.stu[i].no,no)==0)
{
k=i;
break;
}
}
if(k==-1)
{
printf("\n\n没有找到该学生(学号-%s)!",no);
}
else
{
printf("\n请输入学生数据:");
printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tmail");
printf("\n--------------------------------------------------------------------\n");
scanf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t%s",no,name,&age,sex,birthday,address,phone,mail);
strcpy(dd.stu[k].no,no);
strcpy(dd.stu[k].name,name);
dd.stu[k].age=age;
strcpy(dd.stu[k].sex,sex);
strcpy(dd.stu[k].birthday,birthday);
strcpy(dd.stu[k].address,address);
strcpy(dd.stu[k].phone,phone);
strcpy(dd.stu[k].mail,mail);
save_data();
printf("\n\n修改学生信息(学号-%s)成功!",no);
}
}

// 查询(学号)
void query_data_no()
{
int i,k;
char no[10];
printf("\n请输入要查询学生的学号:");
scanf("%s",no);
k=-1;

for(i=0;i<dd.count;i++)
{
if(strcmp(dd.stu[i].no,no)==0)
{
if(k==-1)
{
printf("\n\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tmail");
printf("\n-----------------------------------------------------------------\n");
}
k=i;
printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n",dd.stu[i].no,dd.stu[i].name,dd.stu[i].age,dd.stu[i].sex,dd.stu[i].birthday,dd.stu[i].address,dd.stu[i].phone,dd.stu[i].mail);
}
}
if(k==-1)
{
printf("\n\n没有找到该学生(学号-%s)!",no);
}
}

// 查询(姓名)
void query_data_name()
{
int i,k;
char name[10];
printf("\n请输入要查询学生的姓名:");
scanf("%s",name);
k=-1;

for(i=0;i<dd.count;i++)
{
if(strcmp(dd.stu[i].name,name)==0)
{
if(k==-1)
{
printf("\n\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tmail");
printf("\n-----------------------------------------------------------------\n");
}
k=i;
printf("%s\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n",dd.stu[i].no,dd.stu[i].name,dd.stu[i].age,dd.stu[i].sex,dd.stu[i].birthday,dd.stu[i].address,dd.stu[i].phone,dd.stu[i].mail);
}
}
if(k==-1)
{
printf("\n\n没有找到该学生(姓名-%s)!",name);
}
}

// 主函数
void main()
{
int fun;
read_data();
menu();
while(1)
{
printf("请输入功能号[0-8]:",&fun);
scanf("%d",&fun);
switch(fun)
{
case 0: // 退出
break;
case 1: // 查看所有学生信息
view_data();
break;
case 2: // 输入学生记录
add_data();
break;
case 3: // 删除学生记录
delete_data();
break;
case 4: // 编辑学生记录
edit_data();
break;
case 5: // 查询(学号)
query_data_no();
break;
case 6: // 查询(姓名)
query_data_name();
break;

break;
}
if(fun==0) break;

to_menu();
}
}

参考资料:弄不明白加我QQ469433590

温馨提示:内容为网友见解,仅供参考
第1个回答  2008-06-29
链表即可,很简单.

c语言有一道题不会做,求高手解,最好分析一下。
答案是:C 因为scanf("%c%c",&a,&b);接收的是1和2,在输入后按了“回车”这个回车符会传递到下一句,也就是:c=getchar(); ,这样 c 赋值为回车符了;d=getchar(); 接着就是这句,你输入34的时候,d 只接收单个字符,也就是 3 ;所以最后的输出是:12 3 ...

C语言菜鸟求高手解答...
1. 第一个问题似乎是一个关于C语言条件判断的疑问。你需要明确表达你的问题,以便得到具体的解答。2. 在C语言中,`m++` 表示先使用变量 `m` 的值,然后将 `m` 的值加1。所以,表达式 `m++ > 5` 首先将 `m` 的值(初始为5)用于比较,然后 `m` 自增。3. 由于 `m` 的初始值是5,...

C语言简单编程题目两道,求高手做一下。高分!!!
if (val == 0 || val == 2 || val == 4 || val == 6 || val == 8) { \/\/ 取得的数只要是这5个数中任意一个, count计数就加1 count ++;} } if (count == 4) { \/\/ 如果count=4表示4个位都是0\/2\/4\/6\/8 b[j++] = a[i]; \/\/ 则复制此数字到b数组中...

一道C语言编程问题,高手们来看看帮忙解答下
先推算公式,C^2*(A^2+B^2),= (A^2*B^2),程序就是找寻能让公式左右相等的ABC的值,且0<c<b<a<100.include <stdio.h> int main(){ int a;\/\/定义循环变量。int b;int c;int sum;\/\/ABC之和。for (a = 100;a > 0;a--)\/\/以A为循环变量,在1到100之间。{ for (b = ...

计算机C语言编程问题 高手来 回答好了加分
那行程序相当于:for(i=0 ; i<4 ; i++) a[i]=++a[0];\/\/你应该好好区分一下“*”在不同位置不同的含义、、、有三种含义;(1)变量的声明时,int a[5];int* p=a;\/\/p就相当于一个a指向的地址的别名。注意:是p而不是*p (2)取值操作:比如在操作语句中,*p表示取位于地址p上...

电脑C语言编程,求高手帮忙
int a,b,s=1;scanf("%d%d",&a,&b);printf("%d:",a);for(int i=1;i<=a;i++){ if(a%i==0){ for(int j=2;j=i){ s*=i;printf("%d*",i);} } } printf("\\b=%d,",s);if(s==b) printf("OK\\n");else printf("Err(%d!=%d)\\n",s,b);} 3.include<stdio.h...

C语言编程问题!!高手救命,在线等答案
stu[i].num=i+1;printf("姓名:");fflush(stdin);gets(stu[i].name);printf(" C分数:");scanf("%f",&stu[i].c);\/\/ printf("[0x%08X] size:%3d\\n",&(stu[i].c),sizeof(stu[i].c));printf(" JAVA分数:");scanf("%f",&(stu[i].java));} printf("\\n\\n");for(i...

C语言的题,高手快点来救救我,
incude<stdio.h> define N 5 void main() { int a[N]={ 8,6,5,4,1 },i,j,k;for ( i=0;i<N-1;i++ ) for ( j=i+1;j<N;j++ ) if ( a[i]>a[j] ) {k=a[i];a[i]=a[j];a[j]=k;} for ( i=0;i<N;i++ ) printf("%d ",a[i]); printf("\\n");...

请高手帮我解决一下这道C语言题目,谢谢!
s=fun(3)=3-fun(3-1)=3-fun(2)=3-2=1 所以选A.

请高手帮我解决一下这道C语言题目,谢谢!
p++;\/\/更新指针即p指向s[下一个]a=a\/5;\/\/a整除5 } while(a>0);\/\/a大于0循环 p='\\0';\/\/防止程序出错 puts(s);\/\/输出数组 } 第一轮循环 s[0]=12+55=67='C' a=5 第二轮循环 s[1]=5+48=53='5' a=1 第三轮循环 s[2]=1+48=49='1' a=0 注:s是字符数组,输入...

相似回答