/*

* 已经将错误改正.

* 建议 id 为字符串型, 加入检测是否惟一. 可以加入很多功能, 希望能做得更好.

* 最好是图形界面的.

* Welcome to mysite http://www.atzjg.net

*/

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#define N 2

struct stu_info{

int id; /*学号*/

char name[20]; /*姓名*/

char major[20]; /*专业*/

float score; /*分数*/

};

struct stu_info student[20];

struct stu_info *p;

struct stu_info temp;

FILE *fp;

/*输入模块*/

int save(){

if((fp=fopen("student.dat","w+"))==NULL){

printf("文件打开失败!\n");

exit(0);

}

printf("请依次输入 %d 个同学的信息:\n",N);

printf("学号\t姓名\t专业\t分数\n");

for(p=student;p

scanf(" %d %s %s %f",&(p->id),p->name,p->major,&(p->score));

fwrite(p,sizeof(struct stu_info),1,fp);

}

printf("输入结束!\n");

fclose(fp);

return 0;

}

/*输出模块*/

int show(){

if((fp=fopen("student.dat","r"))==NULL){

printf("文件打开失败!\n");

exit(0);

}

printf("文件已经打开,现在显示所有同学的信息.\n");

p=student;

printf("学号\t姓名\t专业\t分数\n");

while(fread(p,sizeof(struct stu_info),1,fp)!=0){

printf("%d\t%s\t%s\t%f\n",p->id,p->name,p->major,p->score);

p++;

}

fclose(fp);

return 0;

}

/*建立文件模块*/

int select_id(int sid){

int flag=0;

struct stu_info temp;

if((fp=fopen("student.dat","r"))==NULL){

printf("文件打开失败!\n");

exit(0);

}

while(fread(&temp,sizeof(struct stu_info),1,fp)!=0 && flag==0){

if(sid==temp.id){

printf("%d\t%s\t%s\t\t%.2f\n",temp.id,temp.name,temp.major,temp.score);

flag=1;

break;

}

}

if(flag==0){

printf("这里没有学号为 %d 的记录.\n", sid);

}

fclose(fp);

return 0;

}

int select_major(char smajor[]){

int flag=0;

struct stu_info temp;

if((fp=fopen("student.dat","r"))==NULL){

printf("文件打开失败!\n");

exit(0);

}

while(fread(&temp,sizeof(struct stu_info),1,fp)!=0){

if (strcmp(smajor,temp.major)==0){

printf("%d\t%s\t%s\t%f\n",temp.id,temp.name,temp.major,temp.score);

flag=1;

}

}

if(flag==0){

printf("这里没有专业为 %s 的有关记录.\n", smajor);

}

fclose(fp);

return 0;

}

/*查询模块*/

int search(){

int k,sid;

char smajor[20];

printf("选择查询方式:\n");

printf("1.通过学生的学号查询.\n");

printf("2.通过学生的专业查询.\n");

printf("请输入1或2进行查询:\n");

scanf("%d",&k);

switch(k){

case 1: printf("请输入学号:\n");

scanf("%d",&sid);

select_id(sid);

break;

case 2: printf("请输入专业:\n");

scanf("%s",smajor);

select_major(smajor);

break;

default: printf("输入有误.\n");

exit(0);

}

return 0;

}

/*添加模块*/

int append(){

struct stu_info temp;

printf("请输入添加的学生记录信息.\n");

scanf("%d\t%s\t%s\t%f",&(temp.id),temp.name,temp.major,&(temp.score));

if((fp=fopen("student.dat","a+"))==NULL){

printf("文件打开失败!\n");

exit(0);

}

fseek(fp,sizeof(struct stu_info),1);

fwrite(&temp,sizeof(struct stu_info),1,fp);

printf("记录已经被添加.\n");

fclose(fp);

return 0;

}

/*修改模块*/

int amend(){

int flag=0;

struct stu_info temp;

int sid;

char smajor[15];

float newscore;

if((fp=fopen("student.dat","r+"))==NULL){

printf("文件打开失败!\n");

exit(0);

}

printf("请输入要修改的学生的学号:\n");

scanf("%d",&sid);

while(fread(&temp,sizeof(struct stu_info),1,fp)!=0 && flag==0)

if(sid==temp.id){

printf("原来的记录是 %d\t%s\t%s\t%.2f\n",temp.id,temp.name,temp.major,temp.score);

printf("请输入正确的专业:\n");

scanf("%s",smajor);

printf("请输入正确的分数:\n");

scanf("%f",&newscore);

strcpy(temp.major,smajor);

temp.score=newscore;

printf("现在的记录是 %d\t%s\t%s\t%.2f\n",temp.id,temp.name,temp.major,temp.score);

fseek(fp,-sizeof(struct stu_info),1);

fwrite(&temp,sizeof(struct stu_info),1,fp);

flag=1;

printf("记录已经被修改.\n");

break;

}

if(flag==0)

printf("这里没有需要添加的信息.\n");

fclose(fp);

return 0;

}

/*删除模块*/

int deleted(){

int sid;

//int del_id=0;

int i=0,j;

int number=0;

printf("请输入需要删除的学生的学号:\n");

scanf("%d",&sid);

if((fp=fopen("student.dat","r+"))==NULL){

printf("文件打开失败!\n");

exit(0);

}

p=student;

while(fread(p,sizeof(struct stu_info),1,fp)!=0){

if(sid==p->id){

printf("以下记录将被删除:\n%d\t%s\t%s\t%.2f\n",p->id,p->name,p->major,p->score);

i--;

}

i++;

number++;

}

if(i==number)

printf("这里没有需要添加的信息.\n");

else{

printf("最新的文件有 %d 记录.\n",i);

rewind(fp);

for(j=0;j

printf("%d\t%s\t%s\t%.2f\n",student[j].id,student[j].name,student[j].major,student[j].score);

fwrite(&student[j],sizeof(struct stu_info),1,fp);

}

printf("记录已经被删除.\n");

}

fclose(fp);

return 0;

}

/* main program */

int main(){

p=student;

int choice;

while(1){

printf(" ***************学生管理系统***************\n\n\n");

printf(" 1.输入 %d 个学生信息.\n\n", N);

printf(" 2.显示学生的信息.\n\n");

printf(" 3.寻找学生的信息.\n\n");

printf(" 4.修改学生的信息.\n\n");

printf(" 5.添加学生的信息.\n\n");

printf(" 6.删除学生的信息.\n\n");

printf(" 0.退出学生管理系统.\n\n");

printf(" 请选择(0-6):\n");

scanf("%d",&choice);

switch(choice){

case 1: save();break; /*输入模块*/

case 2: show();break; /*输出模块*/

case 3: search();break; /*查询模块*/

case 4: amend();break; /*修改模块*/

case 5: append();break; /*添加模块*/

case 6: deleted();break; /*删除模块*/

case 0: exit(0);

default:printf("输入的数字有误.\n");

}

}

return 0;

}

c语言学生管理p1指向编译错误,在ubuntu下用C语言编写一个学生管理系统,编译时出错,紧急求救!!!...相关推荐

  1. linux 中的代码如何编译错误提示,Ubuntu 下GCC编译代码错误提示没有system.h和conio.h,如何得到这两个文件...

    mudaizi12345 于 2015-01-23 23:42:50发表: very good mudaizi12345 于 2015-01-23 20:36:00发表: 路过试一试 菜菜123 于 ...

  2. 【Linux】Ubuntu下进行C语言编程

    前言 需要您会使用Windows下cd切换目录的基本命令,否则请先自学相关知识,之后再阅读本文. 0 基础命令 介绍最基础的Linux终端命令. su - root:切换到root用户(不用也可以) ...

  3. 计算机最低分怎么英语,编写一个学生类 有年龄 英语、数学、计算机三门成绩 求平均分、最高分、最低分...

    /*编写一个学生类 有年龄 英语.数学.计算机三门成绩 求平均分.最高分.最低分 */ package test; class Student{ private String name; privat ...

  4. 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、数学课(Math)和平均值(avg),方法包括求三门课的平

    问题: 编写一个学生类(Students),包括姓名(name).性别(sex).学号(num).语文课(Chinese).英语课(English).数学课(Math)和平均值(avg),方法包括求三 ...

  5. //编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 //数学课(Math)和平均值(avg)

    //编写一个学生类(Students),包括姓名(name).性别(sex).学号(num).语文课(Chinese).英语课(English). //数学课(Math)和平均值(avg),方法包括求 ...

  6. 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 //数学课(Math)和平均值(avg),方法包括求三门

    //编写一个学生类(Students),包括姓名(name).性别(sex).学号(num).语文课(Chinese).英语课(English). //数学课(Math)和平均值(avg),方法包括求 ...

  7. 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 数学课(Math)和平均值(avg),方法包括求

    /编写一个学生类(Students),包括姓名(name).性别(sex).学号(num).语文课(Chinese).英语课(English). //数学课(Math)和平均值(avg),方法包括求三 ...

  8. 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 //数学课(Math)和平均值(avg),方法包括求

    题目:编写一个学生类(Students),包括姓名(name).性别(sex).学号(num).语文课(Chinese).英语课(English). //数学课(Math)和平均值(avg),方法包括 ...

  9. //编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 //数学课(Math)和平均值(avg),方法包括求

    //编写一个学生类(Students),包括姓名(name).性别(sex).学号(num).语文课(Chinese).英语课(English). //数学课(Math)和平均值(avg),方法包括求 ...

  10. 编写一个学生类 student,包含的属性有学号、姓名年龄,将所有学生存储在一个数组中

    编写一个学生类 student,包含的属性有学号.姓名年龄,将所有学生存储在一个数组中,自拟数据,用数组的初始化方法给数组赋值,并实现如下操作: ①将所有学生年龄增加一岁 ②按数组中顺序显示所有学生信 ...

最新文章

  1. Linux下编译安装Apache、php和svn
  2. 达观数据分析平台架构和Hive实践——TODO
  3. wpf中内容包含在border中_WPF Border各种属性介绍
  4. 通过输入流获取json格式数据转为map格式
  5. ngx_lua模块中的共享内存字典项API
  6. POJ - 3694 Network(边双缩点+LCA+并查集优化)
  7. 如何在博客内添加音乐
  8. Java-数组的使用
  9. 杂项:Java un
  10. 华为服务器报错信息,厂商 push 不通排查指南
  11. VUE 学习代码理解(1~5课时代码)
  12. jcseg 1.7.2 版发布了
  13. STM32寄存器操作端口模式SDA_OUT()/SDA_IN()
  14. 爬取大众点评数据经验
  15. 思维导图怎么画简单又漂亮?脑图轻松制作方法
  16. 阿里云迁移工具推荐最佳实践:物理服务器迁移到阿里云
  17. java web实现拨打电话_Android实现打电话功能
  18. 初探富文本之编辑器引擎
  19. 一个画多个bed文件venn图的好工具
  20. 决策树与XGBOOST

热门文章

  1. ​云原生:重新定义云时代的技术标准 | 凌云时刻
  2. 在线教学战“疫”打响,VIPKID背后是阿里云
  3. 【图像去雾】基于matlab GUI直方图均衡化+Retinex理论图像去雾(带面板)【含Matlab源码 706期】
  4. 【车间调度】基于matlab遗传算法求解置换流水车间调度问题【含Matalb源码 176期】
  5. mysql资源估算_关于数据库查询要耗费的服务器资源估算!高手进~
  6. 面试问到处理过什么棘手问题_为什么调节人工智能如此棘手?
  7. python 执行文件的扩展名_python脚本文件的扩展名是什么
  8. 例2.1 排序 - 九度教程第1题(排序)
  9. java list 超出范围_java.sql.SQLException参数索引超出范围(1参数个数,即0)
  10. linux下如何部署php,linux如何部署php