設某班有n位同學,每位同學的數據包括以下內容:學號(字符串)、姓名(字符串)、數學成績(字符串)、程序設計成績(字符串)。設計程序完成以下五項功能:新建數據檔案、添加數據、刪除數據、對輸入的數據進行排序和查詢。 注: 采用模塊化程序設計思想對系統進行設計; 學生的數據要求用文件保存; 學生的學號作為關鍵字段,不能相同,姓名可以相同。 要求使用結構體,鏈或數組等實現。 【要求】 1.程序運行時,首先顯示主菜單如下: 1.新建數據 2.添加數據 3.刪除數據 4.排序 5.查詢 6.退出 請輸入序號選擇相應操作 用戶輸入序號後,程序進行相應操作。
一、文件名規定 1. 數據庫文件名: students.txt(文本文件) 2. 數學成績排序文件名:sxcj.txt(文本文件) 3. 程序設計成績排序名:cxsj.txt(文本文件) 二、記錄結構和全局變量 typedef struct { char xh[12]; /*學號*/ char xm[12]; /*姓名*/ char sxcj[5]; /*數學成績*/ char cxsj[5]; /*程序設計成績*/ char zf[5]; /*總分*/ struct STD *next /*指向下條記錄*/ struct STD *prev /*指向上條記錄*/ }STD; STD *head=NULL; /*鏈表頭指針,定義為全局變量*/ STD *tail=NULL; /*鏈表尾指針,定義為全局變量*/ STD *current=NULL; /*鏈表當前結點指針,定義為全局變量*/ 補充:[email protected] 謝謝哈 大俠 謝謝
我只會一點點框架,還有很多不會做了
#include "stdio.h"
struct student {
unsigned long num; /*學號*/
char name[20]; /*姓名*/
int score1; /*數學成績*/
int score2; /*程序設計成績*/
int total; /*總分*/
int mc; /*名次*/ };
struct student a[10];
void enter(struct student a[],int n) /*輸入學生基本信息*/
{ int i,j;
printf("請輸入學生信息(學號 姓名 數學成績 程序設計成績):\n");
for(i=0;i<n;i++) { scanf("%ld%s%d%d",&a[i].num,&a[i].name,&a[i].score1,&a[i].score2);
a[i].total=0;
for(j=0;j<2;j++) a[i].total=a[i].score1+a[i].score2; } } /*用選擇法按總分從高到低排序*/
void selectsort(struct student a[],int n)
{ int i,j,p; struct student temp; for(i=0;i<n-1;i++) { p=i; for(j=i+1;j<n;j++) if(a[j].total>a[p].total)p=j; if(p!=i) { temp=a[i]; a[i]=a[p]; a[p]=temp; } } }
void print(struct student a[],int n) /*輸出學生信息*/
{ int i,j,ma=1; printf("\n名次表:\n");
printf("學號 姓名 數學成績 程序設計成績 總分 \n");
for(i=0;i<n;i++)
{ a[i].mc=ma;
printf("%ld %s %d %d %d\n",a[i].num,a[i].name,a[i].score1,a[i].score2,a[i].total ); ma++; } }
void find(unsigned long m,struct student a[],int n) /*查詢*/
{ int i; for(i=0;i<n;i++) if(strcmp(m,a[i].num)==0) { printf("\n The student`s message :\n");
printf("學號:%ld 姓名:%s 數學成績:%d 程序設計成績:%d 總分:%d \n",a[i].num,a[i].name,a[i].score1,a[i].score2,a[i].total); } }
void order(struct student a[],int n)
{ int h; printf("數學成績排序");
printf("程序設計成績排序");
printf("總分排序");
printf("返回主菜單");
printf("輸入序號:");
scanf("%d",h);
switch(h)
{ case 1:enter(a,n);
case 2:
case 3:
case 4:selectsort(a,n);
case 5:find(a,n);
case 6:quit; } }
main() { int n,m; unsigned long ms;
printf("請輸入該寢室學生人數:");
scanf("%d",&n);
printf("/*********XX成績信息管理系統****/\n");
printf("1)新建數據\n");
printf("2)添加數據\n");
printf("3)刪除數據\n");
printf("4)排序\n");
printf("5)查詢\n");
printf("6)退出(exit)\n");
printf("輸入序號:");
scanf("%d",m);
switch(m)
{ case 1:enter(a,n); case 2: case 3: case 4:order(a,n); case 5:finds(a,n); case 6: }
printf("請輸入要查詢的學生學號:");
scanf("%d",&ms); find(ms,a,n); selectsort(a,n); print(a,n); }
來自 http://zhidao.baidu.com/question/28565924.html
我自己也寫了一些,和你的題目稍有不同。。因為我對鏈表很不熟悉啊。。只會結構體了。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
struct student
{
char xh[12]; /*學號*/
char xm[12]; /*姓名*/
char sxcj[3]; /*數學成績*/
char cxsj[3]; /*程序設計成績*/
char zf[3]; /*總分*/
}STD[N];
FILE *datab,*sxcjb,cxsjb;
int i=0;
void adddata()
{char choice='y';
datab=fopen("student.txt","a+");
while(choice=='y'||choice=='Y')
{
printf("學號:");
gets(STD[i].xh);gets(STD[i].xh);
printf("\n姓名:");
gets(STD[i].xm);
printf("\n數學成績:");
gets(STD[i].sxcj);
printf("\n程序設計成績:");
gets(STD[i].cxsj);
itoa((atoi(STD[i].cxsj)+atoi(STD[i].sxcj)),STD[i].zf,10);
fwrite(&STD[i],sizeof(struct student),1,datab);
i++;
printf("是否要輸入下個?\n");
scanf("%s",&choice);
}
fclose(datab);
return;
};
void deldata()
{FILE *fp;
char delxh[20];
struct student del;
datab=fopen("student.txt","r+");
fp=fopen("student1.txt","w+");
printf("請輸入要刪除的學生學號:");
gets(delxh);gets(delxh);
rewind(datab);
do
{
fread(&STD[i],sizeof(struct student),1,datab);
if(strcmp(STD[i].xh,delxh)!=0)
fwrite(&STD[i],sizeof(struct student),1,fp);
}while(!feof(datab));
fclose(fp);
fclose(datab);/*
datab=fopen("student.txt","w+");
fp=fopen("student1.txt","r");
while(!feof(fp))
{fread(&STD[i],sizeof(struct student),1,fp);
fwrite(&STD[i],sizeof(struct student),1,datab);
}
fclose(fp);
fclose(datab);*/
return;
};
/*void sort()
void find()
void print()*/
void main()
{
char ch;
do{
printf("---------------歡迎進入學生管理系統!--------------\n");
printf(" \t1:<添加數據>\n");
printf(" \t2:<刪除數據>\n");
printf(" \t3:<數據排序>\n");
printf(" \t4:<數據查詢>\n");
printf(" \t0:<退出>\n");
printf(" \t請輸入0--4,其他輸入非法!\n");
scanf("%s",&ch);
switch(ch)
{case'1':adddata();break;
case'2':deldata();break;/*
else if(ch==3)sort();
else if(ch==4)find();
else if(ch==5)print();*/
case'0':exit(0);
default:break;
}
}
while(ch!='0');
}
只寫完2個函數,實在沒時間啊,這個題目太大了。