用C语言编写一个车票管理系统
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言编写一个车票管理系统相关的知识,希望对你有一定的参考价值。
1、首先打开CodeBlocks,新建一个空白文件。先定义头文件和主函数。
2、定义所需要的变量,因为有除法,肯定会有小数出现,所以将变量定义为浮点型。
3、定义输入函数,将刚才的x和y定义为计算的变量,将c定义为选择计算方式的变量。scanf("%f%c%f",&x,&c,&y)。
4、添加switch函数,将c作为选择变量。
5、然后在主函数中输入一个输出函数来输出计算式及结果。
6、这时进行运行如图,计算正常。
参考技术A #include<stdio.h> ///宏定义函数#include<string.h> //串操作及内存操作函数
#include<stdlib.h> /////调用系统函数
#include<time.h> ///时间库函数
#include<conio.h> ///输入输出函数
#define N 1000 //宏定义多条记录
typedef struct TICKET ////定义新结构体TICKET
char num[10]; //车次编号
char hour[3]; //时间,,小时
char min[3]; //分钟
char from[10]; //起始站
char to[10]; //终点站
float hours; //车程实际时间
int max; //最大车载容量
int now; //已售票数
CLASS;
int class_num=0; ///初始班次总数为0
CLASS records[N]; // 多条记录
int system_time(); //系统时间
void NewMessage(); //新纪录*录入函数******
void ShowTable1(); //线框调用1,,,不用没次输
void ShowTable2(int i); //线框调用2,,,不用没次输
void Display(); //显示所有函数
void add(); //增加记录
void save(); // 保存函数
void load(); // 按班次查询函数
void search(); //查询函数
void change(); //修改函数**
void quit(); ////////// //退出函数******
void Ticketorder(); // //*售票函数***
void Ticketdelete(); //删除函数*
int menu_select(); //菜单函数*
int whether(int); ////判断时间是否超出函数***
void find(char s1[],char s2[]); //查询函数★//s1为班次//s2为终点站
void deletemessage(); //删除函数
int findnum(char s1[]); //班次查询函数
void get(int,int); //修改及增加班次*
char *menu[]="*****************欢迎使用车票查询系统*****************",
"\n*******************MENU功能菜单***********************",
"\n◤ ★ 1. 录入班次 ◥",
"\n◆ ★ 2. 显示所有班次 ◆",
"\n◆ ★ 3. 查询班次 ◆",
"\n◆ ★ 4. 增加班次 ◆",
"\n◆ ★ 5. 售票 ◆",
"\n◆ ★ 6. 退票 ◆",
"\n◆ ★ 7. 修改班次 ◆",
"\n◆ ★ 8. 删除班次 ◆",
"\n◣ ★ 9. 退出 ◢";
/**************************主函数***************************/
void main()
system("cls"); //刷屏
while(1) //菜单函数循环
switch(menu_select()) //菜单函数*
case 1: NewMessage();break; ////新纪录*录入函数******
case 2: Display();break; // //显示
case 3: search();break; //查找函数**
case 4: add();break; // //增加记录
case 5: Ticketorder();break; ////*售票函数***
case 6: Ticketdelete();break; //删除函数*
case 7: change();break; //修改函数**
case 8: deletemessage();break; //////选择调用删除函数
case 9: quit();break; //////退出函数******
/***********************菜单函数**************************/
int menu_select() /////////菜单函数*
char s[5]; ///定义要输入的数字功能
int c,i;
system("cls"); //刷屏
system("color 09");//改变颜色
for(i=0;i<11;i++)
printf("%s",menu[i]); //输出菜单各项)
i=0;
while(c<0||c>9) //判断是否是1到9的命令
printf("\n"); ///输出换行
printf("******************************************************");
printf("\n请选择(1-9):▁▂▃▄▆▇");
scanf("%s",s);
c=atoi(s); //atoi将字符串转换成一个整数值
///输出菜单面
return c; ////返回请求
/*******************************录入函数************************************/
void NewMessage() //*录入函数******
int i=0,j=5,h; ////
char s[5];
FILE *fp; ////定义文件型指针变量
system("cls"); //刷屏
if((fp=fopen("d:车票管理系统0.dat","rb"))!=NULL) //fopen打开文件
printf("车票信息已经存在请选择增加功能!\n");
printf("任意输入则返回菜单\n");
scanf("%s",s);
i=1; //通过是1
if(i==0)
system("cls"); //刷屏
printf("请输入要录入班次总数:\n");
scanf("%d",&class_num); //指向班次指针
system("cls"); //刷屏
for(i=0;i<class_num;i++)
system("cls"); //刷屏
printf("请输入第%d个班次信息:\n",i+1);
h=-1;
for(;h!=i;) ///循环输出
printf("请输入班次:\n");
scanf("%s",records[i].num);
for(h=0;h<i;h++)
if(strcmp(records[h].num,records[i].num)==0)
//判断字符串比较是否相等,, 待比较的字符串
printf("输入错误!该班次已存在!\n");
break; ///返回
get(i,j); ////修改及增加班次*
j=5;
save(); //调用保存函数
/*******************************显示所有函数********************************/
void Display() //显示所有函数
int i,j;
system("cls"); //刷屏
load(); // 调用按班次查询函数
ShowTable1(); //线框调用1,,,不用没次输
for(i=0,j=0;i<class_num;i++,j+=2) /////按班次顺序输出
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
if(whether(i)) //判断时间是否超出函数***
printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,
records[i].min, records[i].from,records[i].to,records[i].hours,
records[i].max,records[i].now);
else
printf("|%10s| 已发车 |%10s|%10s|%8.1f|%8d|%8d|",records[i].num,
records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
ShowTable2(j); //线框调用2
printf("\n按任意键继续....\n");
getch(); /////从控制台读取一个字符,但不显示在屏幕上
/**********************************打印表头***********************************************/
void ShowTable1() //线框调用1,,,不用没次输
int i=2;
system("cls"); //刷屏
printf("**************************MESSAGE车程信息**********************************\n");
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
printf("\n| 班次 | 发车时间 | 起点站 | 终点站 |行车时间|额定载量| 已售票 |\n");
/***************************************打印表尾************************************************/
void ShowTable2(int i) //线框调用2。不用没次输。
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
/**************************查找函数11**************************/
void search() ////查询调用
int i;
char s1[10]='\0',s2[10]='\0';
system("cls"); //刷屏
printf("1. 按班次查询\n");
printf("2. 按终点站查询\n");
printf("3. 退出\n");
printf("请选择(1-3):\n");
scanf("%d",&i);
load(); // 调用按班次查询函数
switch(i) //多分枝选择语句
case 1: printf("请输入要查询的班次:\n"); //////s1为班次
scanf("%s",s1);
find(s1,s2); /////调用查找函数222 2
break;
case 2: printf("请输入要查询终点站:\n"); /////s2为终点站
scanf("%s",s2);
find(s1,s2); /////调用查找函数222 2
break;
case 3: break;
default : printf("输入错误!\n");
break;
printf("按任意键继续....\n");
getch(); ///从控制台读取一个字符,但不显示在屏幕上
/********************************查询函数22*********************************/
void find(char s1[],char s2[])
int i,h=0,m;
ShowTable1(); ////调用线框1
if(s2[0]=='\0')
m=1; ///1为无条件执行
else m=0;
for(i=0;i<class_num;i++)
if(strcmp(s1,records[i].num)==0||strcmp(s2,records[i].to)==0)
////判断字符串比较是否相等,, 待比较的字符串
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,records[i].min,
records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
h+=2;
if(m==1)
break;
ShowTable2(h); ////调用线框2
if(h==0)
printf("要查找的班次不存在!\n");
/***********************增加函数****************************/
void add() // //增加记录
int i,j=5;
load(); // 调用按班次查询函数
system("cls"); //刷屏
printf("1. 增加班次\n");
printf("2. 返回\n");
printf("请选择(1-2)\n");
scanf("%d",&i);
if(i==1)
system("cls"); //刷屏
printf("1. 请输入要增加的班次:\n");
scanf("%s",records[class_num].num);
for(i=0;i<class_num;i++)
if(strcmp(records[class_num].num,records[i].num)==0)
//判断字符串比较是否相等,, 待比较的字符串 判断车次没重复
printf("输入错误!\n");
getch(); /////从控制台读取一个字符,但不显示在屏幕上
break;
if(i==class_num)
get(i,j); ////修改及增加班次*
class_num++; ///使班次数加1
save(); //调用保存函数
/********************************售票函数*****************************/
void Ticketorder() //*售票函数***
int i;
char num[10];
system("cls"); //刷屏
printf("1. 售票\n");
printf("2. 返回\n");
printf("请选择(1-2):\n");
scanf("%d",&i);
if(i==1)
load(); // 调用按班次查询函数
search(); //查找函数**
printf("请输入要订票的班次(若无请输入0):\n");
scanf("%s",num);
for(i=0;i<class_num;i++)
if(strcmp(num,records[i].num)==0)//判断字符串比较是否相等,, 待比较的字符串
if(records[i].max>records[i].now&&whether(i)==1)
//判断时间是否超出函数***并且***没超出最大客量
records[i].now++; ///使已售的暑假1
printf("通向%s班次为%s的票订票成功!\n",records[i].to,records[i].num);
save(); //调用保存函数
getch(); /////从控制台读取一个字符,但不显示在屏幕上
break;
else
printf("该班次已满或已发出!\n");
getch(); /////从控制台读取一个字符,但不显示在屏幕上
/****************************退票删除函数***************************************/
void Ticketdelete() //删除函数*
int i;
char num[10];
system("cls"); //刷屏
printf("1. 退票\n");
printf("2. 返回\n");
printf("请选择(1-2)\n:");
scanf("%d",&i);
if(i==1)
system("cls"); //刷屏
load(); // 调用按班次查询函数
printf("请输入要退票的班次:\n");
scanf("%s",num);
i=findnum(num); //调用班次查询函数
if(strcmp(num,records[i].num)==0) //判断字符串比较是否相等 待比较的字符串
if(whether(i)) //判断时间是否超出函数***
printf("确定(Y/N)?");
scanf("%s",num);
if(num[0]=='y'||num[0]=='Y')
records[i].now--; //使已售票加1
printf("退票成功!\n");
save(); //调用保存函数
getch(); //从控制台读取一个字符,但不显示在屏幕上
else
printf("该班车已发出,无法退票!\n");
getch(); /////从控制台读取一个字符,但不显示在屏幕上
if(i==class_num)
printf("输入错误!\n");
getch(); /////从控制台读取一个字符,但不显示在屏幕上
/********************************修改函数*********************************/
void change() //修改函数**
char num[10],s[10];
int h=0,j=13,i;
load(); // 调用按班次查询函数
system("cls"); //刷屏
printf("请输入要修改的班次:\n");
scanf("%s",num);
i=findnum(num); //调用班次查询函数
if(i==class_num)
printf("输入错误,无此班次!\n");
getch(); ///从控制台读取一个字符,但不显示在屏幕上
else
printf("确定修改(Y/N)?\n");
scanf("%s",s);
if(s[0]=='y'||s[0]=='Y')
get(i,j); ////修改及增加班次*
save(); //调用保存函数
/*******************************删除函数**********************************/
void deletemessage() //删除班次信息
int i,h=0;
char num[10];
system("cls"); //刷屏
printf("1. 删除班次\n");
printf("2. 返回\n");
printf("请选择(1-2):\n");
scanf("%d",&i);
if(i==1)
system("cls"); //刷屏
printf("请输入要删除的班次:\n");
scanf("%s",num);
i=findnum(num); //调用班次查询函数
if(i==class_num)
printf("输入错误,无此班次!\n");
getch(); ///从控制台读取一个字符,但不显示在屏幕上
else
printf("确定?(y/n)\n");
scanf("%s",num);
if(num[0]=='y'||num[0]=='Y')
for(;i<class_num-1;i++)
records[i]=records[i+1];
class_num--; ////班次总数减1
save(); //调用保存函数
printf("删除成功!\n");
getch();
/****************************按班次查询函数****************************/
int findnum(char s1[]) //查找班次
int i,h=0;
ShowTable1(); //线框调用1,,,不用没次输
for(i=0;i<class_num;i++)
if(strcmp(s1,records[i].num)==0) //判断字符串比较是否相等,如果符合则输出车次等信息
printf("|----------|----------|----------|----------|--------|--------|--------|\n");
printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,
records[i].min,records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
h+=2; ///加2使输出的框架合适
break;
ShowTable2(h); ///调用框架2
return i;
/**************************************保存函数*******************************/
void save() //////保存函数
FILE *fp1,*fp2; //文件行指针
if((fp1=fopen("d:车票管理系统.dat","wb"))==NULL) //打开文件、为输出打开一个二进制文件
printf("文件打开错误!\n");
exit(0);
if((fp2=fopen("d:车票管理系统0.dat","wb"))==NULL) //打开文件、为输出打开一个二进制文件
printf("文件打开错误!\n");
exit(0);
fwrite(&class_num,sizeof(int),1,fp2); //写入文件信息
fwrite(records,sizeof(CLASS),class_num,fp1);
fclose(fp1);fclose(fp2); ///关闭文件
/*******************************按班次查询函数*******************************/
void load() //按班次查询函数
FILE *fp1,*fp2;
if((fp1=fopen("d:车票管理系统.dat","rb"))==NULL)
system("cls"); //刷屏
printf("文件打开错误!\n");
getch(); ///从控制台读取一个字符,但不显示在屏幕上
exit(0);
if((fp2=fopen("d:车票管理系统0.dat","rb"))==NULL)
system("cls"); //刷屏
printf("文件打开错误!\n");
getch(); ///从控制台读取一个字符,但不显示在屏幕上
exit(0); //退出
fread(&class_num,sizeof(int),1,fp2); ///读入信息
fread(records,sizeof(CLASS),class_num,fp1);/////读入信息
fclose(fp1);fclose(fp2); ///文件关闭
/******************************退出函数***************************/
void quit() //退出函数******
char s[5];
printf("确认退出?(Y/N)\n");
scanf("%s",s);
if(s[0]=='y'||s[0]=='Y')
exit(0); //程序中止执行,返回调用过程..state 0-正常中止非0-非正常
/*************************修改及增加班次*******************************/
void get(int i,int j) // 修改及增加班次*
for(;;)
printf("请输入发车时间(xx xx)");scanf("%s%s",records[i].hour,records[i].min);
if((atoi(records[i].hour)<24&&atoi(records[i].hour)>=0)&&(atoi(records[i].min)<60&&atoi(records[i].min)>=0))
break;
else
printf("输入错误!\n");
getch(); /////从控制台读取一个字符,但不显示在屏幕上
printf("请输入起点站:\n");
scanf("%s",records[i].from);
printf("请输入终点站:\n");
scanf("%s",records[i].to);
printf("请输入行车时间:\n");
scanf("%f",&records[i].hours);
printf("请输入额定载量:\n");
scanf("%d",&records[i].max);
for(;;)
printf("请输入已售票数:\n");
scanf("%d",&records[i].now);
if(records[i].now<=records[i].max)
break;
else
printf("输入错误!\n");
getch(); /////从控制台读取一个字符,但不显示在屏幕上
/********************************判断时间是否超出函数**********************************/
int whether(int i) //判断时间是否超出函数***
struct tm *local; //时间结构体
time_t t; //把当前时间给t
t=time(NULL); //NULL在stdio.h中定义为0
local=localtime(&t); /////获取当前系统时间
if(local->tm_hour<atoi(records[i].hour)||local->tm_hour==atoi(records[i].hour)&&local->tm_min<atoi(records[i].min))
//atoi将字符串转换成一个整数值
return 1;
else
return 0;
我也是拷贝别人的 我用过了这个程序可行本回答被提问者采纳 参考技术B java的就有
用C语言编写一个学生管理系统。
实验要求
1、总体要求:系统功能齐全,运行结果正确,用户界面友好,使用简单方便。
2、系统数据要求:学生信息如下:学号、姓名、年龄、所在系、3门课程名称及成绩、总分、平均分。
3、系统功能要求:
⑴输入至少10个学生的自然信息(学号、姓名、年龄、所在系、成绩)。
⑵计算每个学生的总分、平均分,并输出每个学生的学号,姓名,总分,平均分。
⑶根据学生的总分进行排序输出。
⑷针对课程不同科目进行排序输出。
⑸统计输出每门课程的平均分。
⑹实现多种查询功能(例如:根据学号或姓名或所在系等,查询一个或多个学生信息)。
⑺对于已输入的学生信息进行储存。
⑻能实现学生信息的增、删、改操作。
概述
单纯只用多个数组管理学生成绩信息,不使用结构体,该程序最主要的难点是依据学号或总成绩对学生信息进行排序,借助了临时数组来标记排好序的下标。
运行结果如下:
输入数据:
根据总成绩排序:
根据学号删除学生信息:
贴上代码(有点多)
参考技术A 我有一个功能基本上和这差不多。我贴给你吧。#include <stdio.h>
#include <stdlib.h> //exit函数头文件
#include <string.h> //字符串相关操作头文件
#define MAX_STUDENT 30 //最大学生数
//函数声明,本程序共10个子函数,每个函数对应一个操作
void student_scanf(int n);
void student_printf(int n);
int student_find_name(int n);
int student_find_num(int n);
void student_sort_num(int n);
void student_sort_sum(int n);
int student_alter_num(int n);
int student_alter_name(int n);
int student_delete_num(int n);
int student_delete_name(int n);
//全局数组变量,用于存储学生信息
char names[MAX_STUDENT][50];
int math[MAX_STUDENT];
int english[MAX_STUDENT];
int computer[MAX_STUDENT];
int sum[MAX_STUDENT];
int num[MAX_STUDENT];
//以下变量用于学生信息数组排序,作为临时数组
int temp_num[MAX_STUDENT];
char temp_names[MAX_STUDENT][50];
int temp_math[MAX_STUDENT];
int temp_english[MAX_STUDENT];
int temp_computer[MAX_STUDENT];
int temp_sum[MAX_STUDENT];
//sort数组存储排好序的学号或姓名下标
int sort[MAX_STUDENT];
//循环全局变量
int i, j;
//main主函数
int main(void)
int choice,n;
while (1)
printf("*************************************\\n");
printf("欢迎使用学生成绩管理系统\\n");
printf("[1] 输入所有学生信息\\n");
printf("[2] 输出所有学生成绩\\n");
printf("[3] 按学号查找某个学生信息\\n");
printf("[4] 按姓名查找某个学生信息\\n");
printf("[5] 按学号对学生排序\\n");
printf("[6] 按总成绩对学生排序\\n");
printf("[7] 按学号修改某个学生信息\\n");
printf("[8] 按姓名修改某个学生信息\\n");
printf("[9] 按学号删除某个学生信息\\n");
printf("[10] 按姓名删除某个学生信息\\n");
printf("[0] 退出程序\\n");
printf("请输入您的选择(0 - 9):");
scanf("%d",&choice);
printf("**************************************)\\n");
switch (choice)
case 1://录入;
printf("请输入录入的学生信息数: ");
scanf("%d",&n);
student_scanf(n);
break;
case 2://输出;
student_printf(n);
break;
case 3://根据学号查找
student_find_num(n);
break;
case 4://根据姓名查找
student_find_name(n);
break;
case 5://按学号排序
student_sort_num(n);
break;
case 6://按姓名排序
student_sort_sum(n);
break;
case 7://按学号修改
student_alter_num(n);
break;
case 8://按姓名修改
student_alter_name(n);
break;
case 9://按学号删除
student_delete_num(n);
n--;
break;
case 10://按姓名删除
student_delete_name(n);
n--;
break;
case 0://退出程序
printf("退出程序\\n");
printf("程序结束,谢谢使用!\\n");
exit(0);
default:
printf("您输入的菜单有误。请重新输入!\\n");
return 0;
//1.输入信息
void student_scanf(int n)
for (i = 0; i<n; ++i)
printf("\\n请输入第%d个学生的信息:\\n", i + 1);
printf("\\n学号:");
scanf("%d", &num[i]);
printf("\\n姓名:");
scanf("%s", names[i]);
printf("\\n数学成绩:");
scanf("%d", &math[i]);
printf("\\n英语成绩:");
scanf("%d", &english[i]);
printf("\\n计算机成绩:");
scanf("%d", &computer[i]);
//计算总成绩
sum[i] = math[i] + english[i] + computer[i];
//2.打印信息
void student_printf(int n)
printf("\\n学号\\t姓名\\t数学成绩\\t英语成绩\\t计算机成绩\\t总成绩\\n");
printf("----------------------------------------------------------\\n");
for (i = 0; i<n; ++i)
printf("%d\\t%s\\t%d\\t\\t%d\\t\\t%d\\t\\t%d\\n", num[i], names[i], math[i], english[i], computer[i], sum[i]);
printf("-------------------------------------------------------\\n");
//3.按学号查找
int student_find_num(int n)
int nums;
int result;
printf("请输入待查找的学生学号:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
if (nums == num[i])
result = i;
break;
//最后判断q值
if (result == -1)
printf("没有该学生信息!\\n");
return 0;
else
//先打印表头
printf("\\n学号\\t\\t姓名\\t\\t数学成绩\\t英语成绩\\t计算机成绩\\t总成绩\\n");
//再打印数据
printf("%d\\t\\t%s\\t\\t%d\\t\\t%d\\t\\t%d\\t%d\\n", num[result], names[result], math[result], english[result], computer[result], sum[result]);
printf("打印出查找结果!\\n");
return 1;
//4.用姓名查找成绩
int student_find_name(int n)
char name[200];
int result;
printf("请输入待查找的学生姓名:");
scanf("%s", name);
result = -1;
for (i = 0; i<n; ++i)
if (strcmp(name, names[i]) == 0)
result = i;
break;
if (result == -1)
//未找到结果
printf("没有该学生信息!\\n");
return 0;
else//找到结果
printf("\\n学号\\t姓名\\t数学成绩\\t英语成绩\\t计算机成绩\\t总成绩\\n");
printf("%d\\t%s\\t%d\\t\\t%d\\t\\t%d\\t\\t%d\\n", num[result], names[result], math[result], english[result], computer[result], sum[result]);
printf("已完成查找!\\n");
return 1;
//5.按学号排序
void student_sort_num(int n)
int min,max;
for(i=0; i<n; ++i) //复制临时数组
temp_num[i] = num[i];
max = 0; //查找学号最大值,将其下标存至sort数组的最后一个值中
for(j=1; j<n; j++)
if(temp_num[max]<temp_num[j])
max = j;
sort[n-1] = max; //sort数组的最后一个数
for(i=0; i<n-1; ++i)
min = i; //查找学号最小值
for(j=0; j<n; ++j)
if(temp_num[min]>temp_num[j])
min = j;
//sort数组记录排序的学生信息的下标
sort[i] = min;
temp_num[min] = temp_num[max]; //利用临时数组将查找过的学生信息的学号设为最大值,排除查找干扰
for(i=0; i<n; ++i) //再复制一次临时数组
temp_num[i] = num[i];
strcpy(temp_names[i],names[i]);
temp_math[i] = math[i];
temp_english[i] = english[i];
temp_computer[i] = computer[i];
temp_sum[i] = sum[i];
for(i=0; i<n; i++) //按照下标对原数组进行修改
num[i] = temp_num[sort[i]];
strcpy(names[i],temp_names[sort[i]]);
math[i] = temp_math[sort[i]];
english[i] = temp_english[sort[i]];
computer[i] = temp_computer[sort[i]];
sum[i] = temp_sum[sort[i]];
printf("排序完毕,请按菜单键2查看排序结果!\\n");
return ;
//6.按总成绩排序
void student_sort_sum(int n)
int min,max;
for(i=0; i<n; ++i) //复制临时数组
temp_sum[i] = sum[i];
max = 0; //查找总成绩最大值,将其下标存至sort数组的最后一个值中
for(j=1; j<n; j++)
if(temp_sum[max]<temp_sum[j])
max = j;
sort[n-1] = max; //sort数组的最后一个数
for(i=0; i<n-1; ++i)
min = i; //查找总成绩最小值
for(j=0; j<n; ++j)
if(temp_sum[min]>temp_sum[j])
min = j;
//sort数组记录排序的学生信息的下标
sort[i] = min;
temp_sum[min] = temp_sum[max]; //利用临时数组将查找过的学生信息的总成绩设为最大值,排除查找干扰
for(i=0; i<n; ++i) //再复制一次临时数组
temp_num[i] = num[i];
strcpy(temp_names[i],names[i]);
temp_math[i] = math[i];
temp_english[i] = english[i];
temp_computer[i] = computer[i];
temp_sum[i] = sum[i];
for(i=0; i<n; i++) //按照下标对原数组进行修改
num[i] = temp_num[sort[i]];
strcpy(names[i],temp_names[sort[i]]);
math[i] = temp_math[sort[i]];
english[i] = temp_english[sort[i]];
computer[i] = temp_computer[sort[i]];
sum[i] = temp_sum[sort[i]];
printf("排序完毕,请按菜单键2查看排序结果!\\n");
return ;
//7.按学号修改学生信息
int student_alter_num(int n)
int nums;
int result;
printf("请输入待修改的学生学号:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
if (nums == num[i])
result = i;
break;
//最后判断q值
if (result == -1)
printf("没有该学生信息!\\n");
return 0;
else //修改信息值
printf("请重新输入该学生信息:\\n");
printf("学号:\\n");
scanf("%d",&num[result]);
printf("姓名:\\n");
scanf("%s",names[result]);
printf("数学成绩:\\n");
scanf("%d",&math[result]);
printf("英语成绩:\\n");
scanf("%d",&english[result]);
printf("计算机成绩:\\n");
scanf("%d",&computer[result]);
sum[result] = math[result] + english[result] + computer[result];
return 1;
//8.按姓名修改学生信息
int student_alter_name(int n)
char name[50];
int result;
printf("请输入待修改的学生姓名:");
scanf("%s",name);
result= -1;
for (i = 0; i<n; ++i)
if (strcmp(name,names[i])==0)
result = i;
break;
//最后判断q值
if (result == -1)
printf("没有该学生信息!\\n");
return 0;
else //修改信息值
printf("请重新输入该学生信息:\\n");
printf("学号:\\n");
scanf("%d",&num[result]);
printf("姓名:\\n");
scanf("%s",names[result]);
printf("数学成绩:\\n");
scanf("%d",&math[result]);
printf("英语成绩:\\n");
scanf("%d",&english[result]);
printf("计算机成绩:\\n");
scanf("%d",&computer[result]);
sum[result] = math[result] + english[result] + computer[result];
return 1;
//9.按学号删除学生信息
int student_delete_num(int n)
int nums;
int result;
printf("请输入待删除的学生学号:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
if (nums == num[i])
result = i;
break;
//最后判断q值
if (result == -1)
printf("没有该学生信息!\\n");
return 0;
else //删除当前学生信息即为将数组从result的位置依次前挪一个位置
for(i=result; i<n-1; ++i) //最后在main函数中,要将n的值减1
num[i] = num[i+1];
strcpy(names[i],names[i+1]);
math[i] = math[i+1];
english[i] = english[i+1];
computer[i] = computer[i+1];
sum[i] = sum[i+1];
return 1;
//10.按姓名删除学生信息
int student_delete_name(int n)
char name[50];
int result;
printf("请输入待删除的学生姓名:");
scanf("%s",name);
result= -1;
for (i = 0; i<n; ++i)
if (strcmp(name,names[i])==0)
result = i;
break;
//最后判断q值
if (result == -1)
printf("没有该学生信息!\\n");
return 0;
else //删除当前学生信息即为将数组从result的位置依次前挪一个位置
for(i=result; i<n-1; ++i) //最后在main函数中,要将n的值减1
num[i] = num[i+1];
strcpy(names[i],names[i+1]);
math[i] = math[i+1];
english[i] = english[i+1];
computer[i] = computer[i+1];
sum[i] = sum[i+1];
return 1;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<conio.h>
struct student
char name[21];
char number[21];
char specialty[21];
char sex[3];
int c_score;
int english_score;
int math_score;
int total_score;
;
typedef struct student student;
student studentArray[100];
char putout[9][21]="姓名","学号","专业","性别","c语言","英语","数学","总成绩","名次"; //为格式化输出做准备
int count=0; //用来记录学生的记录个数
//函数声明部分
void initialStudent();
void addStudent();
int judge(int );
void delstudent();
void modifyStudent();
void searchStudent();
void studentProfile();
void getaveragescore(int [],int ,double *);
void setOrder(int );
void selectSort(char [][21],int [],int ,int ,int ,char [][21]);
void printUnpassed();
void printAll();
int menuselect();
void clear();
//创建e:\\student.txt文件,并初始化,同时计算出文件中含有的记录总数
void initial()
FILE *fp;
char choice='y';
int i=0;
fp=fopen("e:\\student.txt","r");
if(!fp)
printf("创建文件失败,即将返回\n");
return ;
for(;fread(&studentArray[i],sizeof(struct student),1,fp)!=0;i++);
count=i;
//添加学生信息
void addStudent()
FILE *fp;
char choice='y';
int i=0;
//int sum;
fp=fopen("e:\\student.txt","ab");
if(!fp)
printf("创建文件失败,即将返回\n\n");
return ;
while(choice=='y')
printf("输入学生姓名,学号,专业,性别,中间以空格符隔开\n");
fflush(stdin);
scanf("%s%s%s%s",studentArray[i].name,studentArray[i].number,studentArray[i].specialty,studentArray[i].sex);
printf("输入学生c语言分数,英语分数,数学分数\n");
scanf("%d%d%d",&studentArray[i].c_score,&studentArray[i].english_score,&studentArray[i].math_score);
//sum=judge(studentArray[i].c_score)+judge(studentArray[i].english_score)+judge(studentArray[i].math_score);
while(!judge(studentArray[i].c_score)||!judge(studentArray[i].english_score)||!judge(studentArray[i].math_score))
printf("成绩输入错误,请重新输入\n");
scanf("%d%d%d",&studentArray[i].c_score,&studentArray[i].english_score,&studentArray[i].math_score);
//sum=judge(studentArray[i].c_score)+judge(studentArray[i].english_score)+judge(studentArray[i].math_score);
studentArray[i].total_score=studentArray[i].c_score+studentArray[i].english_score+studentArray[i].math_score;
fwrite(&studentArray[i],sizeof(struct student),1,fp); //将数据写入文件中
i++;
count++;
printf("是否继续输入,继续输入输入y或者Y,其它值退出\n");
fflush(stdin);
choice=getchar();
choice=tolower(choice);
fflush(stdin); //清空缓存输入流
fclose(fp);
printf("输入任意键继续\n\n");
getch();
//return ;
//判断输入成绩是否合法
int judge(int score)
if(score<0||score>100)
return 0;
else if(score<60) //只是为了计算后面的不及格学生相关信息
return 4;
else
return 1;
//删除学生信息
void delStudent()
FILE *fp,*fp2;
int i;
char choice;
int flag1=1;
int flag2=0;
int found=0; //用来标记文件中是否含有此人
char studentName[21];
char studentNumber[21];
fp=fopen("e:\\student.txt","rb");
if(count==0)
printf("文件中没有信息,即将退出\n\n");
//getch();
return ;
fp2=fopen("e:\\test.txt","wb");
if(!fp2)
printf("文件创建失败,即将退出\n");
return;
i=0;
found=0;
printf("按照姓名删除请输入0,按照学号删除请输入1\n");
scanf("%d",&flag2);
fflush(stdin);
if(flag2==0)
printf("输入要删除的学生的姓名,按回车键结束\n");
scanf("%s",studentName);
for(i=0;fread(&studentArray[i],sizeof(struct student),1,fp)!=0;i++) //将其他人信息转移到test.txt文件中
if(strcmp(studentArray[i].name,studentName))
fwrite(&studentArray[i],sizeof(struct student),1,fp2);
else
found=1;
fclose(fp);
fclose(fp2);
fflush(stdin);
if(found==1)
printf("是否确认删除姓名为%s该学生信息,确认删除,输入y或者Y:",studentName);
else
printf("没有此人信息,即将退出\n");
return ;
choice=getchar();
if(choice=='y'||choice=='Y') //将文件结构指针重新定向
count--;
fp=fopen("e:\\student.txt","wb");
fp2=fopen("e:\\test.txt","rb");
for(i=0;fread(&studentArray[i],sizeof(struct student),1,fp2)!=0;i++)
fwrite(&studentArray[i],sizeof(struct student),1,fp);
fclose(fp);
fclose(fp2);
else if(flag2==1)
printf("输入要删除的学生的学号,按回车键结束\n");
scanf("%s",studentNumber);
for(i=0;fread(&studentArray[i],sizeof(struct student),1,fp)!=0;i++) //将其他人信息转移到test.txt文件中
if(strcmp(studentArray[i].number,studentNumber))
fwrite(&studentArray[i],sizeof(struct student),1,fp2);
else
found=1;
fclose(fp);
fclose(fp2);
fflush(stdin);
if(found==1)
printf("是否确认删除学号为%s的该学生信息,确认删除,输入y或者Y:",studentNumber);
else
printf("没有此人信息,即将退出\n\n");
return;
choice=getchar();
if(choice=='y'||choice=='Y') //将文件结构指针重新定向
count--;
fp=fopen("e:\\student.txt","wb");
fp2=fopen("e:\\test.txt","rb");
for(i=0;fread(&studentArray[i],sizeof(struct student),1,fp2)!=0;i++)
fwrite(&studentArray[i],sizeof(struct student),1,fp);
fclose(fp);
fclose(fp2);
else
printf("输入错误\n");
//修改学生信息
void modifyStudent()
FILE *fp,*fp2;
int flag=0;
int i;
char studentName[21];
student newdata;
fp=fopen("e:\\student.txt","rb");
if(count==0)
printf("文件中还没有学生信息,即将退出\n\n");
return ;
fp2=fopen("e:\\test.txt","wb");
if(!fp2)
printf("文件创建失败,即将返回\n");
return ;
printf("输入要修改的学生的姓名\n");
fflush(stdin);
scanf("%s",studentName);
for(i=0;fread(&studentArray[i],sizeof(struct student),1,fp)!=0;i++)
if(!strcmp(studentArray[i].name,studentName))
flag=1;
printf("输入要修改后学生的姓名,学号,专业,性别\n");
fflush(stdin);
scanf("%s%s%s%s",newdata.name,newdata.number,newdata.specialty,newdata.sex);
printf("输入修改后的学生的c语言分数,英语分数,数学分数\n");
scanf("%d%d%d",&newdata.c_score,&newdata.english_score,&newdata.math_score);
while(!judge(studentArray[i].c_score)||!judge(studentArray[i].english_score)||!judge(studentArray[i].math_score))
printf("输入不合法,请重新输入\n");
scanf("%d%d%d",&newdata.c_score,&newdata.english_score,&newdata.math_score);
newdata.total_score=newdata.c_score+newdata.english_score+newdata.math_score;
fwrite(&newdata,sizeof(struct student),1,fp2);
else
fwrite(&studentArray[i],sizeof(struct student),1,fp2);
if(flag==0)
printf("没有此人,即将退出\n\n");
return ;
fclose(fp);
fclose(fp2);
fp=fopen("e:\\student.txt","wb");
fp2=fopen("e:\\test.txt","rb");
for(i=0;fread(&studentArray[i],sizeof(struct student),1,fp2)!=0;i++)
fwrite(&studentArray[i],sizeof(struct student),1,fp);
printf("\n\n");
fclose(fp);
fclose(fp2);
//查找某学生信息
void searchStudent()
FILE *fp;
char studentName[21];
int flag=0;
int i;
fp=fopen("e:\\student.txt","rb");
if(count==0)
printf("文件中还没有学生记录,即将退出\n\n");
return ;
printf("输入你要查找的学生姓名\n");
fflush(stdin);
scanf("%s",studentName);
for(i=0;fread(&studentArray[i],sizeof(struct student),1,fp)!=0;i++)
if(strcmp(studentName,studentArray[i].name)==0)
flag=1;
printf("要查找的学生相关信息如下:\n");
printf("%-10s%-15s%-20s%-5s",putout[0],putout[1],putout[2],putout[3]);
printf("%-6s%-6s%-6s%-6s\n", putout[4],putout[5],putout[6],putout[7]);
printf("%-10s%-15s%-20s",studentArray[i].name,studentArray[i].number,studentArray[i].specialty);
printf("%-5s",studentArray[i].sex);
printf("%-6d%-6d",studentArray[i].c_score,studentArray[i].english_score);
printf("%-6d%-6d\n",studentArray[i].math_score,studentArray[i].total_score);
printf("\n");
printf("\n");
if(flag==0)
printf("没有找到姓名为%s的学生\n",studentName);
fflush(stdout);
printf("\n");
return ;
//学生信息总体概况,如平均分,总人数
void studentProfile()
FILE *fp;
int i;
int cArray[100]; //用来存储c语言分数
double cAverage; //用来存储c语言平均成绩
int englishArray[100];
double englishAverage;
int mathArray[100];
double mathAverage;
int totalArray[100];
double totalAverage;
fp=fopen("e:\\student.txt","rb");
if(count==0)
printf("没有学生信息,即将退出\n\n");
return ;
for(i=0;fread(&studentArray[i],sizeof(struct student),1,fp)!=0;i++)
cArray[i]=studentArray[i].c_score;
englishArray[i]=studentArray[i].english_score;
mathArray[i]=studentArray[i].math_score;
totalArray[i]=studentArray[i].total_score;
printf("共有%d个学生信息\n",count);
getaveragescore(cArray,i,&cAverage);
getaveragescore(englishArray,i,&englishAverage);
getaveragescore(mathArray,i,&mathAverage);
getaveragescore(totalArray,i,&totalAverage);
printf("c语言平均成绩为%.2f分\n",cAverage);
printf("英语平均成绩为%.2f分\n",englishAverage);
printf("数学平均成绩为%.2f分\n",mathAverage);
printf("总分平均成绩为%.2f分\n",totalAverage);
printf("\n\n");
//统计平均分
void getaveragescore(int arrayscore[],int n,double *averagescore)
double sum=0;
int i=0;
for(;i<n;i++)
sum+=arrayscore[i];
*averagescore=sum/n;
//有序输出学生的成绩
void setOrder(int flag) //flag表示选择成绩是从低到高还是从高到底排序,0从低到高,1则反之
FILE *fp;
int i,j;
student temp;
int choice;
//flag=0;
fp=fopen("e:\\student.txt","rb");
if(count==0)
printf("没有学生信息,即将退出\n\n");
return ;
for(i=0;fread(&studentArray[i],sizeof(struct student),1,fp)!=0;i++); //将数据读入结构数组中
for(choice =1;choice<5;choice++)
switch(choice)
case 1:printf("c语言成绩:\n");
for(i=0;i<count-1;i++) //选择排序
for(j=i+1;j<count;j++)
if(studentArray[i].c_score>studentArray[j].c_score)
temp=studentArray[i];
studentArray[i]=studentArray[j];
studentArray[j]=temp;
if(!flag)
printf("%-10s%-10s%-15s%-10s\n",putout[8],putout[0],putout[1],putout[4]);
for(i=0;i<count;i++)
printf("%-10d%-10s%-15s%-10d\n\n",count-i,studentArray[i].name,studentArray[i].number,studentArray[i].c_score);
else
printf("%-10s%-10s%-15s%-10s\n",putout[8],putout[0],putout[1],putout[4]);
for(i=count-1;i>=0;i--)
printf("%-10d%-10s%-15s%-10d\n\n",count-i,studentArray[i].name,studentArray[i].number,studentArray[i].c_score);
break;
case 2:printf("英语成绩:\n");
for(i=0;i<count-1;i++)
for(j=i+1;j<count;j++)
if(studentArray[i].english_score>studentArray[j].english_score)
temp=studentArray[i];
studentArray[i]=studentArray[j];
studentArray[j]=temp;
if(!flag)
printf("%-10s%-10s%-15s%-10s\n",putout[8],putout[0],putout[1],putout[5]);
for(i=0;i<count;i++)
printf("%-10d%-10s%-15s%-10d\n\n",count-i,studentArray[i].name,studentArray[i].number,studentArray[i].english_score);
else
printf("%-10s%-10s%-15s%-10s\n",putout[8],putout[0],putout[1],putout[5]);
for(i=count-1;i>=0;i--)
printf("%-10d%-10s%-15s%-10d\n\n",count-i,studentArray[i].name,studentArray[i].number,studentArray[i].english_score);
break;
case 3:printf("数学成绩:\n");
for(i=0;i<count-1;i++)
for(j=i+1;j<count;j++)
if(studentArray[i].math_score>studentArray[j].math_score)
temp=studentArray[i];
studentArray[i]=studentArray[j];
studentArray[j]=temp;
if(!flag)
printf("%-10s%-10s%-15s%-10s\n",putout[8],putout[0],putout[1],putout[6]);
for(i=0;i<count;i++)
printf("%-10d%-10s%-15s%-10d\n\n",count-i,studentArray[i].name,studentArray[i].number,studentArray[i].math_score);
else
printf("%-10s%-10s%-15s%-10s\n",putout[8],putout[0],putout[1],putout[6]);
for(i=count-1;i>=0;i--)
printf("%-10d%-10s%-15s%-10d\n\n",count-i,studentArray[i].name,studentArray[i].number,studentArray[i].math_score);
break;
case 4:printf("总成绩:\n");
for(i=0;i<count-1;i++)
for(j=i+1;j<count;j++)
if(studentArray[i].total_score>studentArray[j].total_score)
temp=studentArray[i];
studentArray[i]=studentArray[j];
studentArray[j]=temp;
if(!flag)
printf("%-10s%-10s%-15s%-10s\n",putout[8],putout[0],putout[1],putout[7]);
for(i=0;i<count;i++)
printf("%-10d%-10s%-15s%-10d\n\n",count-i,studentArray[i].name,studentArray[i].number,studentArray[i].total_score);
else
printf("%-10s%-10s%-15s%-10s\n",putout[8],putout[0],putout[1],putout[7]);
for(i=count-1;i>=0;i--)
printf("%-10d%-10s%-15s%-10d\n\n",count-i,studentArray[i].name,studentArray[i].number,studentArray[i].total_score);
break;
return ;
//输出不及格学生的相关信息
void printUnpassed()
FILE *fp;
int i;
int total=0;
fp=fopen("e:\\student.txt","rb");
if(count==0)
printf("没有学生信息,即将退出\n\n");
return ;
printf("不及格学生相关信息如下所示\n");
printf("%-10s%-15s%-20s%-5s",putout[0],putout[1],putout[2],putout[3]);
printf("%-6s%-6s%-6s%-6s\n", putout[4],putout[5],putout[6],putout[7]);
for(i=0;fread(&studentArray[i],sizeof(struct student),1,fp)!=0;i++)
if(judge(studentArray[i].c_score)+judge(studentArray[i].english_score)+judge(studentArray[i].math_score)>3)
printf("%-10s%-15s%-20s",studentArray[i].name,studentArray[i].number,studentArray[i].specialty);
printf("%-5s",studentArray[i].sex);
printf("%-6d%-6d",studentArray[i].c_score,studentArray[i].english_score);
printf("%-6d%-6d\n",studentArray[i].math_score,studentArray[i].total_score);
printf("\n");
total++;
printf("不及格学生人数共有%d人\n\n",total);
return ;
//输出文件中所有学生信息记录
void printAll()
FILE *fp;
int i;
//student buffer;
fp=fopen("e:\\student.txt","rb");
if(count==0)
printf("现在还没有学生记录,即将退出\n");
printf("\n");
return ;
printf("该文件中一共有%d个学生记录,记录如下:\n",count);
printf("%-10s%-15s%-20s%-5s",putout[0],putout[1],putout[2],putout[3]);
printf("%-6s%-6s%-6s%-6s\n", putout[4],putout[5],putout[6],putout[7]);
for(i=0;fread(&studentArray[i],sizeof(struct student),1,fp)!=0;i++)
printf("%-10s%-15s%-20s",studentArray[i].name,studentArray[i].number,studentArray[i].specialty);
printf("%-5s",studentArray[i].sex);
printf("%-6d%-6d",studentArray[i].c_score,studentArray[i].english_score);
printf("%-6d%-6d\n",studentArray[i].math_score,studentArray[i].total_score);
printf("\n");
void clear()
FILE *fp;
char ch;
printf("你确认删除所有学生记录吗?继续输入y活着Y\n");
fflush(stdin);
ch=getchar();
if(ch=='y'||ch=='Y')
fp=fopen("e:\\student.txt","wb");
count=0;
return ;
//主函数
int main()
int choice;
printf("**************************欢迎进入学生信息管理系统******************************");
initial();
while(1)
switch(choice=menuselect())
case 0:
printf("************************欢迎下次再次使用*********************\n");
exit(0);
case 1:
addStudent();
break;
case 2:
delStudent();
break;
case 3:
modifyStudent();
break;
case 4:
searchStudent();
break;
case 5:
studentProfile();
break;
case 6:
setOrder(0);
break;
case 7:
setOrder(1);
break;
case 8:
printUnpassed();
break;
case 9:
printAll();
break;
case 10:
system("CLS");
//clrscr();
break;
case 11:
clear();
break;
return 0;
//菜单函数
int menuselect()
int choice;
do
printf("0.退出管理系统\n");
printf("1.添加学生信息记录\n");
printf("2.删除某一指定学生记录\n");
printf("3.修改某一给定学生信息\n");
printf("4.查找某一给定学生信息\n");
printf("5.输出学生信息总体概况\n");
printf("6.按照分数从低到高输出学生相关信息\n");
printf("7.按照分数从高到低输出学生相关信息\n");
printf("8.输出不及格学生的相关信息\n");
printf("9.输出文件中所有学生的记录\n");
printf("10.清屏\n");
printf("11.删除所有学生记录\n");
printf("输入你的选择:");
scanf("%d",&choice);
while(choice<0||choice>11);
return choice;
参考技术B
学生信息管理系统
#include<stdio.h>
#inelude<stdlib.h>
#include<stnng.h
#define BUFLEN 100
#define LEN 15
#define N 100
#strucet record
char codc[LEN+I J;
char name[LEN-1];
int age:
char sex 13l:
char timc[1.KN-I J;
char add[301;
char tcl [l.EN+1 J:
char mail[30]:
stu[N]:
int k=1.n,m.
void readfilcO;
void seekO;
void modify(;
void insert();
void del();
void display(;
void save();
void menu(;
int main(
{
While(k)
menu();
system("pause");
一℃himl 0:
void help()
printf("\\ nO.欢迎使用系统帮助,\\ n);
printf("\\ n1.进入系统后,先制新学生信息,再查询:\\n’);
printf(" \\n2.按照菜单提示键入数字代号\\ n
printf("\\ n3. 增加学生信息后,切记保存按;\\.n”
printf("\\n4. 谢谢您的仗用!\\ n");
void n:adlilcO
r
r
char *p-"studcnt.txt'
FILE *fp,
hit i-0;
if ((fp=fopen("studcnt.txt","r" ))`=NULL)
printf("Open file %s error' Strike any key to exit! P);
system("pause");
exit(0);
while(fscanf(fp,"%s 0os0od0,os 0os %s %s 0os",stu[i].code,stu[i1.name,&stu(i1.age,
stu[i].sex,stuLiJ.time,stuLiJ.add,stu[iJ.tel.stu [iJ.mail)"==8)
i++;
i-i;
char codc[LEN+1 J;
char name[LEN-1 ];
nit age;
char sex [3I;
char timc[LEN-I J;
char add[30];
char tcl[LEN+I I;
char mail[30J;
)stu[N];
int k=1.n,m;
void readfilcO;
void seek();
void modify();
void insert();
void delO;
void display();
void save();
void menu();
int main()
while(k)
menu();
systcm("pause");
return 0:
void help()
printf(" \\ nO.欢迎仗用系统帮助,\\ n");
printf(" n1.进入系统后,先刷新学生信息,再查询:\\ n);
printf("in2.按照菜单提示键入数字代号加\\ n);
printf("1n,. t加学生信息后,切记保存按钮\\ n”
printf("'nd. i$:41您的使用\\ n);
void readfile()
char *p-"studcnLtxt";
FILE*fp
int i=0;
if ((fp=fopcn("student. tx t","r'' )卜=NULL)
printf("Open file %s error' Strike any key to exit!".p);
systcm("pause");
exit(0);
i++;
i=i;
printf("请选择菜单编号:’’);
scanf("%d",&num);
switch(num)
case 0:help();break;
cast 1:readflic();break;
case 2:seek();break;
case 3:modify();break;
case 4:insert();break;
case 5:del();break:
case 6:display();break;
case 7:savc();break;
case 8:k=0,break:
defaalt:prinf(”请在一8之间选择\\n"):
拓展资料
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
参考技术C 以前做的,应该可以运行#include<stdio.h> #include<string.h> struct S char name[20]; /*姓名*/ int number; /*学号*/ float score_yuwen; /*语文成绩*/ float score_shuxue; /*数学成绩*/ float score_yingyu; /*英语成绩*/ T; /*建立学生成绩信息的结构体*//*信息维护========将学生信息数据以文件的形式保存*/ void writefile(T *student,int n) FILE *fp; int i,j; if((fp=fopen("d:\\kanwei.txt","w+"))==NULL) printf("can't open file"); exit(0); for(i=0;i<=n;i++) fprintf(fp,"%s %d %f %f %f\n",student[i].name,student[i].number,student[i].score_yuwen,student[i].score_shuxue,student[i].score_yingyu); fclose(fp); /* 信息维护========增加学生信息 */ void add(T*student,int n) int I; printf("输入要增加的学生的姓名、学号、语文成绩、数学成绩、英语成绩:"); scanf("%s %d %f %f %f\n",student[n+1].name,&student[n+1].number,&student[n+1].score_yuwen,&student[n+1].score_shuxue,&student[n+1].scor_yingyu); getchar(); while(student[n+1].number!=0) /*输入学号为0时退出*/ if(student.number==NULL) printf("\n没有任何学生资料!\n"); return(sutdent); endif for(i=0;i<=n;i++) if(student[n+1].number==student[i].number) printf(“此学生已存在!\n”); else if(student[n+1].number<student[i].number) student=student[i]; student[i]=student[n+1]; student[n+1]=student; break; for(;i<=n;i++) Student=student[i+1]; student[i+1]=student[n+1]; student[n+1]=student; n=n+1; printf("已经增加了!\n") printf("现在的学生数为:%d个!\n",n); return(student); /* 信息维护========删除学生信息 */ delete(T *head) score *p1,*p2; int number; printf("输入要删除的学生的学号:"); scanf("%d",&number); getchar(); while(number!=0) /*输入学号为0时退出*/ if(head==NULL) printf("\n没有任何学生资料!\n"); return(head); p1=head.number; while(number!=p1->number&&p1->next!=NULL) /*p1指向的不是所要找的首结点,并且后面还有结点*/ p2=p1;p1=p1->next; /*p1后移一个结点*/ if(number==p1->number) if(p1==head) head=p1->next; /*若p1指向的是首结点,把后一个结点地址赋予head*/ else p2->next=p1->next; /*否则将下一个结点地址赋给前一结点地址*/ printf("删除:%d\n",number);n=n-1; else printf("%d不存在此学生!\n",number); /*找不到该结点*/ endif printf("已经删除了!\n") printf("现在的学生数为:%d个!\n",n); return(head); /*信息维护========修改学生信息*/ void modify(T *student,int n,) delet(student,n,); addfile(student,n); /*信息查询========按学生姓名查询*/ int find1(T *student,int n,int *tp) char name[20]; int i; printf(“输入要查询的学生的名字:”); scanf(“%s,name\n”); for(i=0;i<=20;i++) if(name==student[i].name) printf(“此学生的信息:%s %d %f %f %f\n”,student[i].name,student[i].number,student[i].score_yuwen,student[i].score_shuxue,student[i].score_yingyu); else printf(“无此学生信息!请重新输入:\n”); find1(T*student,int n,int *tp); return() /*信息查询========按学生学号查询*/ int find2(T *student,int n,int *tp) int number; int i; printf(“输入要查询的学生的学号:”); scanf(“%d”,number); for(i=0;i<=20;i++) if(number==student[i].number) printf(“此学生的信息:%s %d %f %f %f\n”,student[i].name,student[i].number,student[i].score_yuwen,student[i].score_shuxue,student[i].score_yingyu); else printf(“无此学生信息!请重新输入:\n”); find2(T*student,int n,int *tp); return() /*=========成绩统计========*/ void count(T*student,int n+1) int i,score1,score2; char class; printf(“输入课程名和分数段:”); scanf(“%s %d %d”,class,score1,score2); if(score1>score2) i=score1; score1=score2; score2=i; if(class==yuwen) yuwen(T*student,n+1,score1,score2); if(class==shuxue) shuxue(T*student,n+1,score1,score2); if(class==yingyu) yingyu(T*student,n+1,score1,score2); /*========按语文成绩统计========*/ void yuwen(T*student,int n+1,int score1,int score2) int i,j,a,b; for(i=0;i<=n;i++) for(j=0;j<=n;j++) if(student[i].score_yuwen>student[j].score_yuwen) student[n+1]=student[i]; student[i]=student[j]; student[j]=student[n+1]; for(i=0;i<=n;i++) if(student[i].score_yuwen<=score1) a=i; if(student[i].score_yuwen<=score2) b=i; for(i=a;i<=b;i++) printf(“%s %d %f %f %f\n”,student[i].name,student[i].number,student[i].score_yuwen,student[i].score_shuxue,student[i].score_yingyu); return() /*========按数学成绩统计========*/ void shuxue(T*student,int n+1,int score1,int score2) int i,j,a,b; for(i=0;i<=n;i++) for(j=0;j<=n;j++) if(student[i].score_shuxue>student[j].score_shuxue) student[n+1]=student[i]; student[i]=student[j]; student[j]=student[n+1]; for(i=0;i<=n;i++) if(student[i].score_shuxue<=score1) a=i; if(student[i].score_shuxue<=score2) b=i; for(i=a;i<=b;... 参考技术D 高二的时候,我自己写过。现在在学其它的语言,就不献丑了,在网上给你找到了,是百度文库里面的,直接复制过来的话,排版不对,你自己去看一下吧,完整的代码。http://wenku.baidu.com/view/43624a60f5335a8102d22056.html 名字就是《用C语言编写的一个学生信息管理系统》
PS:写这个,主要是用到C语言的链表,不难,只是有的时候,如果思路不清晰的话,容易写错,写漏等等,如果不参考上面,而是你自己写的话,建议先画个大概的树图出来,再开始编吧。
纯手工打的,帮到你的话,就采纳吧。追问
那个jiemian(); 是什么意思啊?那个程序有的地方我还是有点不会改。。。
追答是一个自定义的调用函数。调用函数在C中可是很重要的噢!
遇到不懂的慢慢找书上的知道识看看,你会收益不少的!
可以加你吗?有些问题想问问你。
追答不好意思噢,朋友,我已经有些年没怎么碰C啦,现在在学其它语言。我只能向你提供一下学习的方法而已。
本回答被提问者采纳以上是关于用C语言编写一个车票管理系统的主要内容,如果未能解决你的问题,请参考以下文章