1、1浏水浮芸 QQ632069015数据结构课程设计报告一元稀疏多项式计算器、迷宫问题、成绩分析问题、图的基本操作与实现以及背包问题的求解学院(系): 计算机 班 级: 软件工程 4 班 学生姓名: 江志伟 学号 10803080409 指导教师: 时间: 从 2010 年 01 月 11 日到 2010 年 01 月 15 日2一、课程设计概述:本次数据结构课程设计共完成五个题:一元稀疏多项式计算器、迷宫问题、成绩分析问题、图的基本操作与实现以及背包问题的求解使用语言:C编译环境:TC3.0二、课程设计题目一实验内容一元稀疏多项式计算器问题描述设计一个一元稀疏多项式简单计算器。基本要求一元稀疏
2、多项式简单计算器的基本功能是:(1) 输入并建立多项式;(2) 输出多项式,输出形式为整数序列:n,c 1,e1, c2,e2, cn,en,其中 n 是多项式的项数,ci,ei,分别是第 i 项的系数和指数,序列按指数降序排序;(3) 多项式 a 和 b 相加,建立多项式 a+b;(4) 多项式 a 和 b 相减,建立多项式 a-b;(5) 计算多项式在 x 处的值。(6) 计算器的仿真界面。 (选做)概要设计-=ADT=-Test1:主类,程序的启动 Item :项,表示多项式中的某一项Ploynomial:多项式类 存储结构Item 属性:private double c;/系数priv
3、ate int e;/指数Item 方法:public void setC(double c)/设置系数public void setE(int e) /设置指数public double getC()/获取系数3public int getE()/获取指数public double resultItem(double x)/在 x 处 Item 的值private double fac(double x,int e)/求 x 的 e 次方,当 e 为整数时Polynomial 属性:private LinList list;/单链表Polynomial 方法:public Polynomia
4、l()public Polynomial(Item item)throws Exception /构造函数 private void initItem(Item item)/初始化 Item 数组,使其是按降序排序 public int getItemNum()/获取项数 public void print()throws Exception/打印多项式 不空行public void println()throws Exception/打印多项式 空行public LinList getLinList()/获取单链表4public void printPolynomial()throws Ex
5、ception/只打印项数、系数和指数public Polynomial add(Polynomial other)throws Exception/多项式相加public Polynomial subtraction(Polynomial other)throws Exception/多项式相减public double result(double x)throws Exception 详细设计Item 类:public class Item private double c;/系数private int e;/指数public Item()public Item(double c,int
6、e)this.c=c;this.e=e;public void setC(double c)this.c=c;5public void setE(int e)this.e=e;public double getC()return c;public int getE()return e;public double resultItem(double x)return getC()*fac(x,getE();private double fac(double x,int e)/求 x 的 e 次方,当 e 为整数时if(e=0) return 1;return x*fac(x,e-1); Poly
7、nomial 类:import java.util.*;public class Polynomial/多项式类private LinList list;/单链表public Polynomial()list=new LinList(0,null);public Polynomial(Item item)throws Exception /构造函数int n=item.length;list=new LinList(n,null);if(n=0) return;6initItem(item); tryfor(int i=0;iitemmax.getE() max=j;if(max!=i)Ite
8、m temp=itemi;itemi=itemmax;itemmax=temp;public int getItemNum()/获取项数 Object temp=list.head.getElement();int n=-1;if(temp instanceof Integer)Integer i=(Integer)temp;n=i.intValue();return n;public void print()throws Exception/打印多项式 不空行int n=getItemNum();/ System.out.println(n);if(n=-1) return ;if(n=0)
9、7System.out.print(“0“);return;boolean flag=true;/是不是输出第一项的标志for(int i=0;i0)System.out.print(“+“+c+“x“+temp.getE(); else if(c=0 /向右 即西if(r-1=0 /向上 即北22return null;/连通不到下一个路口public InterSection getNext(InterSection p1,InterSection p2)/按顺时针获取的int r1=p1.row;int c1=p1.col;int r2=p2.row;int c2=p2.col;if(r
10、2=0 if(r2-1=0 if(r2=r1 if(c2-1=0 if(r2r1 if(r2-2=0 if(r2-1=0 23if( c2+2col if( r2+1row return null;public boolean depthSearch(InterSection point)throws Exception/递归int r=point.row;int c=point.col;/ System.out.print(“(“+point.row+“,“+point.col+“) “);if(r=exit.row return true;visitedrc=true;InterSecti
11、on temp=getFirstNeighbor(point);while(temp!=null) if(!visitedtemp.rowtemp.col)if(depthSearch(temp)System.out.print(“(“+point.row+“,“+point.col+“) “);return true;temp=getNext(point,temp);return false;public String answer(InterSection p)throws Exception/非递归 通过堆栈来实现SeqStack stack=new SeqStack(50);Strin
12、g s1=“;String s2=“;visitedp.rowp.col=true;stack.push(p);while(stack.notEmpty()24InterSection temp=(InterSection)stack.pop();visitedtemp.rowtemp.col=true;s1+=“(“+temp.row+“,“+temp.col+“) “;if(temp.row=exit.row s2=s1;InterSection u=getFirstNeighbor(temp);while(u!=null visitedu.rowu.col=true;if(u.row=e
13、xit.row stack.push(u);u=getNext(temp,u);return “没有通路“;public void printMaze()/打印迷宫for(int i=1;i10;i+)for(int j=1;j9;j+)System.out.print(pointij.w+“ “);System.out.println();/*/public class InterSection/路口类/行列指定路口的位置int row;/行下标int col;/列下标int w;/0 和 1 分别表示迷宫中的通路和障碍public InterSection(int r,int c,int
14、w1)25row=r;col=c;w=w1;运行结果及分析1. 初始界面及结果:四、课程设计题目三成绩分析问题问题描述录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。基本要求(1)通过键盘输入各学生的多门课程的成绩,建立相应的文件 input.dat。(2)对文件 input.dat 中的数据进行处理,要求具有如下功能:1) 按各门课程成绩排序,并生成相应的文件输出。2) 计算每人的平均成绩,按平均成绩排序,并生成文件。3) 求出各门课程的平均成绩、最高分、最低分、不及格人数、6069 分人数、7079分人数、8089 分人数、90 分以上人数。4) 根据姓名或学号查询某人的各门课成绩
15、,重名情况也能处理。(3)界面美观。26概要设计Student 类:public class Student String number;String name;int math;int english;int computer;public Student(String num,String n,int m,int e,int c)number=num;name=n;math=m;english=e;computer=c;public Student()name=“;number=“;math=0;english=0;computer=0;public int getSum()return
16、math+english+computer;public double getAverage()double d=getSum()/3.0;d=(int)(d*100)*0.01;return d;Test5 类:import javax.swing.*;27import javax.swing.JScrollPane;import java.awt.event.*;import java.awt.*;import java.awt.Color;import java.util.*;import java.io.*;public class Test5 extends JFrame imple
17、ments ActionListener,MouseListener/组件private JTable table;private JScrollBar scrollBar;private JToolBar toolBar;private JTextField textField;private JButton button; private JScrollPane scrollPane; private JMenuBar menuBar; private JMenu file;private JMenu sort;private JMenuItem add;private JMenuItem
18、 remove;private JMenuItem file1;private JMenuItem file2;private JMenuItem file3;private JMenuItem sort1;private JMenuItem sort2;private JMenuItem sort3;private JMenuItem sort4;private JMenuItem sort5;private JPopupMenu pop;private JMenuItem cancel;/其它属性private ArrayList arrayList;private Student stu
19、dent;/数学private int mathNoPass=0;/不及格人数private int countMath1=0;/60 到 69 人数28private int countMath2=0;/70 到 79 人数private int countMath3=0;/80 到 90 人数private int countMath4=0;/90 以上人数/英语private int engNoPass=0;/不及格人数private int countEnglish1=0;/60 到 69 人数private int countEnglish2=0;/70 到 79 人数private
20、 int countEnglish3=0;/80 到 90 人数private int countEnglish4=0;/90 以上人数/计算机 private int comNoPass=0;/不及格人数private int countComputer1=0;/60 到 69 人数private int countComputer2=0;/70 到 79 人数private int countComputer3=0;/80 到 90 人数private int countComputer4=0;/90 以上人数private boolean flag=false;/标志量public Te
21、st5()private void updateTabel()/更新表格private void initFile()/初始化文件 即给文件赋值private void readFile() /读文件/排序public void sortSum()/按总成绩public void sortMath()/按数学29public void sortEnglish()/按英语public void sortComputer()/按计算机/文件的其他操作public int getMaxMath()/数学的最大值public int getMaxEnglish()/英语的最大值public int g
22、etMaxComputer()/计算机的最大值public double getMathAverage()/获得数学的平均成绩public double getEnglishAverage()/获得英语的平均成绩public double getComputerAverage()/获得计算机的平均成绩public int getMinMath()/数学的最小值;public int getMinEnglish()/英语的最小值public int getMinComputer()/计算机的最小值private void getNumber()/求各段的人数30/查找public void fi
23、nd()/删除public void delete()/增加public void add()public void actionPerformed(ActionEvent ae)public void mouseReleased(MouseEvent e)public void mouseClicked(MouseEvent e)public void mouseEntered(MouseEvent e)public void mouseExited(MouseEvent e)public void mousePressed(MouseEvent e)public static void main(String args)new Test5();详细设计Student 类:public class Student String number;String name;int math;int english;int computer;public Student(String num,String n,int m,int e,int c)number=num;name=n;